Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.16 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 Wikijunior:Języki/Quenya 104 30680 552422 551903 2026-08-19T09:52:30Z Orondil 20723 Małe poprawki, standaryzacja zapisu wymowy, usunięcie błędów leksykalnych i ortograficznych (w quenyi) 552422 wikitext text/x-wiki <noinclude>{{T|Wikijunior:Języki nagłówek}}</noinclude> Quenya to '''sztuczny język''', stworzony w całości przez brytyjskiego pisarza Johna Ronalda Reuela Tolkiena. Jego najbardziej znane dzieła to seria książek ''Władca Pierścieni'' i powieść ''Hobbit''. Poza quenyą Tolkien stworzył jeszcze wiele innych języków, lecz tylko dwa – ''quenya'' i ''sindarin'' – są na tyle rozwinięte, że można ich używać. == Jak zapisuje się ten język? == {{Plik|plik=Arda.Tengwar.png|auto=tak,2;-1|opis=Słowo '''''Arda''''' (''świat'') zapisane w Tengwarze}} Używa on specjalnego systemu znaków, znanego jako ''Tengwar''. "Tengwar" w quenyi znaczy dosłownie "litery". Te litery są zupełnie inne, od tych, którymi zapisany jest '''ten''' tekst, czyli od liter łacińskich. Nie ma jednak żadnych ograniczeń i quenyę można zapisywać każdym systemem pisma. Do zapisu quenyi naszym alfabetem używamy liter: :'''a, á, b, c, d, e, é, f, g, h, i, í, l, m, n, o, ó, p, q, r, s, t, u, ú, v, w, x,''' i '''y.''' Istnieją małe różnice w czytaniu liter: <br /> '''c''' czyta się zawsze jak '''k''', <br /> '''y''' jak '''j''', <br /> '''w''' jak '''ł''', <br /> '''v''' jak '''w'''.<br /> Są też grupy liter, które reprezentują dźwięki zapisywane osobnymi tengwami (literami): '''ny''', '''ty''', '''ly''', '''gw''', '''nw''', '''qu''' (dawniej: ''cw'') i tak dalej. Zapis quenyi nie opierał się na początku o alfabet łaciński, dlatego niektórzy mogą zapisać jeden wyraz na dwa sposoby. Przykładowo, niektórzy napiszą: ''cirya'' (''statek''), a inni: ''kirya''. Jest to spowodowane tym, że w Tengwarze ''c'' i ''k'' oznaczają ten sam dźwięk i przypada im jeden znak.<br> Czasem można zauważyć, że litery mają nad sobą dwie małe kropki, np. '''ë''' w wyrazie ''nissë'' (''kobieta''). Nie wpływa to na wymowę – po prostu Tolkien w ten sposób zaznaczył dla ludzi mówiących po angielsku, że ''e'' na końcu wyrazu jest także wymawiane.<br> Zdarza się też, że litera ma nad sobą pochyłą kreskę, np. '''ó'''. Czyta się to wtedy jako zwykłe '''o''', które wymawia się długo (''oo''), np. ''hón'' (''serce''). == Gdzie używa się tego języka? == Tolkien stworzył świat, który jest bardzo podobny do naszego. Nazwał go ''Arda''. Jest to miejsce, w którym żyją przeróżne ludy, w tym Ludzie, Krasnoludy i Elfy. Elfy dzielą się na wiele szczepów i każdy mówi w jednym z języków: '''sindarinie''', '''quenyi''', '''telerinie''', '''nandorinie''' i wielu innych. Są one podobne, ponieważ wywodzą się z języka praelfickiego. Sama quenya dzieli się na dialekty takie jak vanyarin i ñoldorin. Podobnie jest z językami europejskimi, np. francuskim, włoskim i hiszpańskim. Wszystkie powstały na podstawie starożytnego języka – łaciny. W naszym świecie również używa się tego języka. Poza użyciem quenyi i sindarinu w filmach ''Petera Jacksona'', istnieją grupy ludzi, które uczą się quenyi. Takie grupy są najliczniejsze między innymi w Europie i krajach Ameryki Południowej. == Jacy są najpopularniejsi ludzie tworzący w tym języku? == '''''J.R.R. Tolkien''''' (1892 – 1973) twórca quenyi i innych języków Śródziemia. Jego syn, '''Christopher Tolkien''', kontynuował publikowanie tekstów związanych z quenyą po śmierci ojca. '''Helge K. Fauskanger''' i '''Thorsten Renk''' to jedni z najbardziej znanych badaczy języków Tolkiena. Napisali w języku angielskim pierwsze podręczniki i artykuły o quenyi i sindarinie (drugim języku Elfów). '''Paul Strack''' to twórca Eldamo, strony analizującej i dokumentującej języki Tolkiena. Jest też autorem najbardziej aktualnego kursu quenyi. '''Ryszard Derdziński''' to polski badacz języków Tolkiena, a także tłumacz językowych dodatków do '''''Władcy Pierścieni'''''. Napisał kilka wierszy w quenyi i sindarinie. == Jakie są podstawowe słowa i zwroty, których mogę się nauczyć? == {| class="wikitable" ! Zwrot (quenya) !! Wymowa !! Znaczenie (polski) !! Opis |- | Elen síla lúmenn' omentielvo || [elen siila luumen omentielwo] || Gwiazda świeci na czas naszego spotkania || uroczyste, ceremonialne powitanie |- | alla || [alla] || cześć || krótkie, nieformalne powitanie |- | márienna || [maarienna] || do widzenia || pożegnanie, jego bardziej znanym wariantem jest poetyckie ''namárië'' |- | hantan || [hantan] || dziękuję || wyrażenie wdzięczności |- | ná || [naa] || tak || odpowiedź twierdząca |- | lá || [laa] || nie || odpowiedź przecząca |- | mana esselya? || [mana esselja] || jak masz na imię? || pytanie o imię |- | nanyë... || [nańje] || jestem… || przedstawianie się |- | essenya ná... || [esseńja na] || nazywam się… || podawanie imienia |- | lá hanyëan || [laa hańjean] || nie rozumiem || wyrażenie braku zrozumienia |- | ma hanyal ni? || [ma hańjal ni] || rozumiesz mnie? || pytanie o zrozumienie |- | aran || [aran] || król || tytuł władcy |- | tári || [tari] || królowa || tytuł władczyni |- | Elda || [elda] || Elf || jeden z Eldarów; liczba mnoga: ''Eldar'' |- | atto ar amya || [atto ar amja] || tata i mama || ''ar'' oznacza „oraz” |- | töa || [toa] || drewno || materiał |- | ondo || [ondo] || kamień || materiał, skała |- | cas || [kas] || głowa || część ciała |- | masta || [masta] || chleb || pożywienie |- | Anar || [anar] || Słońce || ciało niebieskie |- | Isil || [isil] || Księżyc || ciało niebieskie |- | lírë || [lire] || piosenka || utwór muzyczny |- | laire || [laire] || wiersz || utwór poetycki |} === Liczby === {| class="wikitable" ! Zwrot (quenya) !! Wymowa !! Znaczenie (polski) !! Opis |- | min || [min] || 1 || podstawowy liczebnik „jeden” |- | atta || [atta] || 2 || liczebnik „dwa” |- | neldë || [nelde] || 3 || liczebnik „trzy” |- | canta || [kanta] || 4 || liczebnik „cztery” |- | lempë || [lempe] || 5 || liczebnik „pięć” |- | enquë || [enkłe] || 6 || liczebnik „sześć” |- | otso || [otso] || 7 || liczebnik „siedem” |- | toldo || [toldo] || 8 || liczebnik „osiem” |- | nertë || [nerte] || 9 || liczebnik „dziewięć” |- | quëan || [kłean] || 10 || liczebnik „dziesięć” |- | minquë || [minkłe] || 11 || liczebnik „jedenaście” |- | yunquë || [junkłe] || 12 || liczebnik „dwanaście” |} === Kolory === {| class="wikitable" ! Zwrot (quenya) !! Wymowa !! Znaczenie (polski) !! Opis |- | carnë || [karne] || czerwony || podstawowy kolor czerwony |- | culuina || [kulujna] || pomarańczowy || barwa pomarańczowa |- | fána || [faana] || biel chmur || jasna, chmurna biel |- | helwa || [helwa] || kolor nieba || błękit nieba |- | laiqua || [laikła] || zielony || barwa roślin |- | laurëa || [lałrea] || złoty || kolor złota, blask |- | lossëa || [lossea] || śnieżnobiały || bardzo jasna biel |- | luinë || [lujne] || niebieski || podstawowy niebieski |- | malina || [malina] || żółty || barwa żółta |- | morna || [morna] || czarny || ciemna barwa |- | ninquë || [ninkłe] || biały || podstawowa biel |- | silma || [silma] || jaskrawy biały / srebrny || błyszcząca biel lub srebro |- | sinda || [sinda] || szary || barwa popielata |- | varnë || [warne] || brązowy || barwa ziemi |- | culda || [kulda] || płomienny czerwony || intensywny, ognisty odcień czerwieni |} === Miesiące === {| class="wikitable" ! Zwrot (quenya) !! Wymowa !! Znaczenie (polski) !! Opis |- | Narvinyë || [narwińje] || styczeń || pierwszy miesiąc roku |- | Nénimë || [neenime] || luty || drugi miesiąc roku |- | Súlimë || [suulime] || marzec || trzeci miesiąc roku |- | Víressë || [viiresse] || kwiecień || czwarty miesiąc roku |- | Lótessë || [lootesse] || maj || piąty miesiąc roku |- | Nárië || [naarie] || czerwiec || szósty miesiąc roku |- | Cermië || [kermie] || lipiec || siódmy miesiąc roku |- | Úrimë || [uurime] || sierpień || ósmy miesiąc roku |- | Yavannië || [jawannie] || wrzesień || dziewiąty miesiąc roku |- | Narquelië || [narkłelie] || październik || dziesiąty miesiąc roku |- | Hísimë || [hiisime] || listopad || jedenasty miesiąc roku |- | Ringarë || [ringare] || grudzień || dwunasty miesiąc roku |} == Czy są jakieś wiersze lub piosenki, których mogę się nauczyć? == Tak – jest wiele tekstów w quenyi, a nawet tłumaczeń polskich modlitw i kolęd. Oto pierwsza zwrotka Namárië, fragment wiersza autorstwa samego Tolkiena: (Tak się pisze:) <blockquote width=80%; style="background:#f4f4ff; border: 1px solid #999; border-right-width: 2px"> Ai! laurië lantar lassi súrinen,<br> Yéni únótimë ve rámar aldaron!<br> Yéni ve lintë yuldar avánier<br> mi oromardi lisse-miruvóreva<br> Andúnë pella, Vardo tellumar<br> nu luini yassen tintilar i eleni<br> ómaryo airetári-lírinen.<br> </blockquote> Tak się wymawia: <blockquote width=80%; style="background:#f4f4ff; border: 1px solid #999; border-right-width: 2px"> Aj! lałrie lantar lassi suurinen<br> jeeni uunootime we raamar aldaron<br> jeeni we linte juldar awanier<br> mi oromardi lisse miruwoorewa<br> anduune pella, vardo tellumar<br> nu lujni jassen tintilar i eleni<br> oomarjo ajretaari liirinen.<br> </blockquote> W przekładzie Marii Skibniewskiej to znaczy: <blockquote width=80%; style="background:#f4f4ff; border: 1px solid #999; border-right-width: 2px"> Ah! jak złoto lecą z wiatrem liście!<br> Nie zliczysz lat, jak na drzewie ptasich skrzydeł.<br> I jak słodki nektar białego miodu<br> w pałacach na zachodzie,<br> pod niebieskim stropem Vardy,<br> gdzie gwiazdy drżą na głos jej śpiewu,<br> przeczysty i królewski – tak płyną lata.<br> </blockquote> {{BrClear}} <noinclude> == Źródła i przydatne linki == {{wikipedia|Quenya}} {{T|Wikijunior:Języki stopka}} </noinclude> 10r604grmr0q96lvfe7n8zsp26gwswp Moduł:Sprawdź 828 31189 552382 552379 2026-08-18T18:42:38Z Persino 2851 552382 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2])and (not tabelka_parametrow_rodzica[name2]))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } jb1wogqar7jn5edpwzcf9n3yoqunu0w 552383 552382 2026-08-18T18:44:12Z Persino 2851 552383 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2]))then if(not tabelka_parametrow_rodzica[name2])then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; return true; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; return false; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; return true; elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; return false; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2])and (not tabelka_parametrow_rodzica[name2]))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } pqaeevzqpdxpbywjao0w4skc73luuoj 552384 552383 2026-08-18T18:49:01Z Persino 2851 552384 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2])and (not tabelka_parametrow_rodzica[name2]))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } jb1wogqar7jn5edpwzcf9n3yoqunu0w 552385 552384 2026-08-18T18:57:03Z Persino 2851 552385 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[1])and(not wartosc[2])and (not tabelka_parametrow_rodzica[name2]))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } o4ndwwodto3ydqqxppjbehk9jld49rj 552386 552385 2026-08-18T19:11:24Z Persino 2851 552386 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and (not tabelka_parametrow_rodzica[name2]))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } op8dawi2psq5iv9v6ucd2ix05jmryqu 552387 552386 2026-08-18T19:23:28Z Persino 2851 552387 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być niepuste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 07dc7oe17wn07qefjgmh3okqa5gdclk 552388 552387 2026-08-18T19:34:05Z Persino 2851 552388 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, ale nie zawsze ze wszystkimi, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } mw3d4mvw0ourotaxnrd1jimgfea0jcw 552389 552388 2026-08-18T19:41:35Z Persino 2851 552389 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={{},{}}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne[1],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne[1]) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; for _,_konieczne in ipairs(konieczne[2]) do message:wikitext("Konieczne pola, które powinny być używane, z nie wszystkimi, parametrami dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } la6cdj20km91amvcnu53cwmtp377yum 552390 552389 2026-08-18T19:44:23Z Persino 2851 Anulowano wersję [[Special:Diff/552389|552389]] autorstwa [[Special:Contributions/Persino|Persino]] ([[User talk:Persino|dyskusja]]) 552390 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne,argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do message:wikitext("Konieczne pola, które powinny być używane z innymi parametrami, ale nie zawsze ze wszystkimi, dla "..argName(_konieczne)..": "..mw.text.listToText(tab_inne_elementy_konieczne(_konieczne))..".<br/>") end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } mw3d4mvw0ourotaxnrd1jimgfea0jcw 552391 552390 2026-08-18T20:17:28Z Persino 2851 552391 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]==0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if((obslugiwane(name2))and(not wartosc[4])and(not wartosc[2])and (not wartosc[3])and (tabelka_parametrow_rodzica[name2]) and(#tabelka_parametrow_rodzica[name2]>0))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } sbmy19qsd8uvmoy8o2w338g39w5eeji 552392 552391 2026-08-18T20:28:11Z Persino 2851 552392 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return false; end; end; return true; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 6aij8aelkghqjbhqbtvbulybh0e6srg 552393 552392 2026-08-18T20:34:14Z Persino 2851 552393 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o odpowiedniej podanej wartości, które nie powinne być używane z innymi parametrami lub z tymi podanymi: ", mw.text.listToText(repeated), ".<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 1t8e23xuxqosadhu6sbrgko19fseo4o 552394 552393 2026-08-18T20:44:28Z Persino 2851 552394 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o podanej wartości, dla parametrów z listy: ", mw.text.listToText(repeated), ", nie powinny jednocześnie ze sobą współistnieć, lub wystarczy zmienić jego wartość na z niepustej na pustą, lub przeciwnie, albo odjąc ten parametr z listy argumentów.<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 70hf7vuprmh5hxufqu3bs0bl09p8prl 552395 552394 2026-08-18T20:45:40Z Persino 2851 552395 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola o podanej wartości, dla parametrów z listy: ", mw.text.listToText(repeated), ", nie powinny jednocześnie ze sobą współistnieć.<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } dygnvtmvryczu6fz2419avuqf82rscx 552396 552395 2026-08-18T20:47:43Z Persino 2851 552396 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola, o podanej wartości lub same pozycje, dla parametrów z listy: ", mw.text.listToText(repeated), ", nie powinny jednocześnie ze sobą współistnieć.<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 5ggafvo6wnlt3e4tugaudz36bt9fl9i 552397 552396 2026-08-18T22:40:38Z Persino 2851 552397 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("O nieprawidłowej wartości pola: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola, o podanej wartości lub same pozycje, dla parametrów z listy: ", mw.text.listToText(repeated), ", nie powinny jednocześnie ze sobą współistnieć.<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } b2re83nvzimtn8vzaraxufypnnjfsa3 552398 552397 2026-08-18T23:30:16Z Persino 2851 552398 Scribunto text/plain return { ["NazwaKategoriiSprawdzaniaParametrówSzablonu"]=function() return "Szablony z dodatkową opcją sprawdzania parametrów"; end; ["UsuńKategorięSprawdzaniaParametrówSzablonu"]=function(frame) local wikikod=frame.args[1]; local sprawdz_modul=require("Module:Sprawdź"); local kategoria_sprawdzania_parametrow=sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"](); local specjalne_modul=require("Module:Specjalne"); return specjalne_modul["UsuńŚciśleOkreśloneKategorie"]{[1]=wikikod,[2]=kategoria_sprawdzania_parametrow,} end; ["Porównaj"] = function(frame) local pf=frame:getParent(); local config = pf.args[""] or "" local brudnopis=pf.args["brudnopis"]; local options = mw.text.split(config, "|") local templateName = mw.text.trim(options[1]) if #templateName == 0 then local title = mw.title.getCurrentTitle() if title.namespace == 10 then templateName = mw.ustring.match(title.text, "^(.-)/opis") or mw.ustring.match(title.text, "^(.-)/test") or mw.ustring.match(title.text, "^(.-)/brudnopis") or title.text end if #templateName == 0 then mw.log("brak nazwy szablonu") return end end local i = 2 local showparams = true local showinfo = true local vertical = false local brudnopis; while i <= #options do local parametr,wartosc=mw.ustring.match(options[i],"^([^%=]*)%=(.*)$") if(not parametr)then local option = mw.text.trim(options[i]) if option == "bez wikikodu" then showparams = false elseif option == "bez opisu" then showinfo = false elseif option == "pionowo" then vertical = true end else local parametr=mw.text.trim(parametr) if(parametr=="brudnopis")then brudnopis=mw.text.trim(wartosc); end; end i = i + 1 end; local templateTitle = mw.title.new(templateName, 10) if templateTitle.id == 0 then mw.log("szablon '"..templateName.."' nie istnieje") return end local sandboxName = brudnopis or (templateName.."/brudnopis") local sandboxTitle = mw.title.new(sandboxName, 10) if sandboxTitle.id == 0 then mw.log("brudnopis '"..sandboxName.."' nie istnieje") return end local templateParams = {} local params = {} for k, v in pairs(pf.args) do if (k ~= "") then templateParams[k] = v table.insert(params, k) end end local result = {} table.insert(result, '<table style="width: 100%;">') if showparams and (#params > 0) then local compare = function(a, b) -- return a < b if (type(a) == "number") and (type(b) == "number") then return a < b end if (type(a) == "string") and (type(b) == "string") then return a < b end if (type(a) == "number") and (type(b) == "string") then return true end return false end table.sort(params, compare) table.insert(result, "<caption><code>&#x7B;&#x7B;") table.insert(result, templateName) for i, k in ipairs(params) do table.insert(result, " &#x7C; ") local p = mw.text.nowiki(tostring(k)) local v = mw.text.nowiki(templateParams[k]) table.insert(result, p) table.insert(result, " = ") table.insert(result, v) end table.insert(result, "&#x7D;&#x7D;</code></caption>") end local templateResult = frame:expandTemplate{ title=templateName, args=templateParams} local sandboxResult = frame:expandTemplate{ title=sandboxName, args=templateParams} if templateResult and string.match(templateResult, "^{|") then templateResult = "\n"..templateResult end if sandboxResult and string.match(sandboxResult, "^{|") then sandboxResult = "\n"..sandboxResult end if vertical and showinfo then table.insert(result, '<tr><th style="width: 15em">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><th>[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') elseif vertical then table.insert(result, '<tr><td>') table.insert(result, templateResult) table.insert(result, '</td></tr><tr><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') else if showinfo then table.insert(result, '<tr><th style="width: 50%;">[[Szablon:') table.insert(result, templateName) table.insert(result, '|Szablon]]</th><th style="width: 50%;">[[Szablon:') table.insert(result, sandboxName) table.insert(result, '|Brudnopis szablonu]]</th></tr>') end table.insert(result, '<tr style="vertical-align: top;"><td>') table.insert(result, templateResult) table.insert(result, '</td><td>') table.insert(result, sandboxResult) table.insert(result, '</td></tr>') end table.insert(result, "</table>") return table.concat(result) end, ["Parametry"] = function(frame) local pf=frame:getParent(); local unknown = {} local invalid = {} local deprecated = {} local nakedurl = {} local exturl = {} local files = {}; local templateName; local function argName(arg) local span = mw.html.create('span'); span:css('white-space','pre'); span:wikitext(arg); return type(arg) ~= "string" and tostring(arg) or ('"'..tostring(span:allDone())..'"'); end local parametry_modul=require("Module:Parametry"); local dodatkowe_elementy=pf.args["dodatkowe parametry"]; local tablica_dodatkowe_elementy; if(parametry_modul.CzyTak(dodatkowe_elementy))then tablica_dodatkowe_elementy={}; local __tablica_dodatkowe_elementy=mw.text.split(dodatkowe_elementy,";;",false); for _,value in ipairs(__tablica_dodatkowe_elementy)do local tab_dwoch_element=mw.text.split(value,"=",false); if((tab_dwoch_element[1])and(tab_dwoch_element[2]))then tablica_dodatkowe_elementy[mw.text.trim(tab_dwoch_element[1])]=mw.text.trim(tab_dwoch_element[2]); end; end; end; local ramka_modul=require("Module:Ramka"); local tabelka1=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów szablonu"]); local tabelka2=ramka_modul.RozpakujArgumenty(pf.args["bez argumentów szablonu"]); local tabelka_bez_argumentow=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2) local required = {}; local repeated = {}; local konieczne = {}; local empty = {}; local noempty = {}; local sprawdz_modul=mw.loadData("Module:Sprawdź/dane"); local tabelka_argumentow_systemowych_funkcji=sprawdz_modul.tabelka_argumentow_systemowych_funkcji; local tabelka_argumentow_dodatkowych_funkcji=sprawdz_modul.tabelka_argumentow_dodatkowych_funkcji; local tabelka_argumentow_systemowych_szablonu=sprawdz_modul.tabelka_argumentow_systemowych_szablonu; local tabelka_parametrow_rodzica={}; local parametry_rodzica=parametry_modul.CzyTak(pf.args["potomek"])and pf.args["parametry rodzica"]; local szablonowe_modul=require("Module:Szablonowe"); if(parametry_rodzica)then tabelka_parametrow_rodzica=ramka_modul.RozpakujParametry(parametry_rodzica); templateName=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle()); else tabelka_parametrow_rodzica=pf.args; templateName=szablonowe_modul.NazwaSzablonu(pf:getTitle()); end; local czy_dokumentacja=((parametry_modul.CzyTak(frame.args["dokumentacja"])) or (parametry_modul.CzyTak(tabelka_parametrow_rodzica["dokumentacja"]))); if(czy_dokumentacja)then return;end; local czy_dodaj_parametry_pudelka=parametry_modul.CzyTak(frame.args["dodaj parametry pudełka"]); if(czy_dodaj_parametry_pudelka)then--dodaje parametry pudełka tabelka_argumentow_systemowych_szablonu["parametry pudełka"]=""; tabelka_argumentow_systemowych_szablonu["bez błędu"]=""; tabelka_argumentow_systemowych_szablonu["bez szczegółów"]=""; --dodaje parametry nienazwane i dla parametru: 1, którego ewentualną pierwszą nazwą jest: cel-- local maksimum=parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabelka_parametrow_rodzica); for i=1,maksimum,1 do if(i>1)then tabelka_argumentow_systemowych_szablonu[i]="txt!"; else tabelka_argumentow_systemowych_szablonu[1]="txt!;cel"; end; end; tabelka_argumentow_systemowych_szablonu["cel"]="txt!;1" end; local tablica_mikroszablonow={ ["{{+}}"]=";", ["{{!+}}"]="^", ["{{+!}}"]="$", }; tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_funkcji); tabelka_bez_argumentow=parametry_modul["UsuńElementyTabeli"](tabelka_bez_argumentow,tabelka_argumentow_systemowych_szablonu); local zmienna_sprawdzania_parametrow=pf.args["zmienna sprawdzania parametrów"]; local zmienne_dodane={}; if(zmienna_sprawdzania_parametrow)then local tabelka_zmiennych=mw.text.split(zmienna_sprawdzania_parametrow,";;",false); for poz,war in ipairs(tabelka_zmiennych)do local zmienna,wartosc=mw.ustring.match(war,"^%s*(.+)%s*=%s*(.*)%s*$") if((zmienna)and(wartosc))then zmienna=mw.text.trim(zmienna); wartosc=mw.text.trim(wartosc); zmienne_dodane[tonumber(zmienna) or mw.ustring.gsub(zmienna,"{{[^{}]+}}",tablica_mikroszablonow)]=wartosc; end; end; end; local zmienne_konieczne=function(tab,czy_odjete) for k, v in pairs(tab)do if(czy_odjete or ((not tabelka_argumentow_systemowych_funkcji[k]) and (not tabelka_argumentow_systemowych_szablonu[k]) and (not tabelka_bez_argumentow[k]) ) )then local wydziel=mw.ustring.match(v,"^%s*(^.*$%s*%??%s*!?)%s*"); if wydziel and mw.ustring.match(wydziel, "!%s*$") then required[k] = true elseif mw.ustring.match(mw.ustring.match(v,"^([^;]*!?)%s*"), "!%s*$") then required[k] = true end end; end; end; zmienne_konieczne(frame.args,false); zmienne_konieczne(zmienne_dodane,true); zmienne_konieczne(tabelka_argumentow_systemowych_funkcji,true); zmienne_konieczne(tabelka_argumentow_systemowych_szablonu,true); local emptyArg = false local Kind=function(k,kind) if(not kind)then return;end; if(tablica_dodatkowe_elementy)then local element=tablica_dodatkowe_elementy[k]; return kind..(element and (";"..element) or ""); end; return kind; end; local tab={}; local tab_ogolne={}; local obslugiwane=function(k) if(tab_ogolne[k])then local tab_szczegolne=tab_ogolne[k]; return tab_szczegolne[1],tab_szczegolne[2],tab_szczegolne[3]; end; local kind=(not tabelka_argumentow_dodatkowych_funkcji[k]) and ((not tabelka_bez_argumentow[k]) and (tabelka_argumentow_systemowych_funkcji[k] or tabelka_argumentow_systemowych_szablonu[k] or zmienne_dodane[k] or frame.args[k]) or nil ) or nil; kind=Kind(k,kind); local zapytajnik; local wykrzyknik; if (kind) then local kind2;local zmienne; kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*(!?^.*$%s*%+[^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-%s*%+%s*!?^.*$)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); if((not kind2)or(not zmienne)or (not zapytajnik))then kind2,zapytajnik,wykrzyknik,zmienne=mw.ustring.match(kind,"^%s*([^;]-)%s*(%??)%s*(!?)%s*;%s*(.-)%s*$"); end; end; end; if((kind2)and(zmienne))then local tab2=mw.text.split(mw.text.trim(zmienne),"%s*;%s*",false); tab[k]={}; for _,value in ipairs(tab2) do value=mw.text.trim(value); local indeks=tonumber(value) or mw.ustring.gsub(value,"{{[^{}]+}}",tablica_mikroszablonow); local indeks2,wykrzyknik=mw.ustring.match(tostring(indeks),"^%s*(.*)%s*(!!?)%s*$"); local indeks3,zapytajnik=mw.ustring.match(tostring(indeks2 or indeks),"^%s*(.*)%s*(%?)%s*$"); local inne,indeks4=mw.ustring.match(tostring(indeks3 or indeks2 or indeks),"^%s*(!)%s*(.*)%s*$"); tab[k][indeks4 or indeks3 or indeks2 or indeks]={((not inne) and true or false), ((not wykrzyknik) and true or false), ((not zapytajnik) and true or false), ((not (wykrzyknik=="!!")) and true or false), }; end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); else kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(!?%s*^.*$)%s*(%??)%s*(!?)%s*$"); if(not kind2)or(not zapytajnik)then kind2,zapytajnik,wykrzyknik=mw.ustring.match(kind,"^%s*(.-)%s*(%??)%s*(!?)%s*$"); end; kind=mw.ustring.gsub(kind2,"{{[^{}]+}}",tablica_mikroszablonow); end; end; kind=kind and mw.text.trim(kind); tab_ogolne[k]={kind,wykrzyknik,zapytajnik,}; return kind,wykrzyknik,zapytajnik; end; local function inne_elementy_nieobslugiwane(k) local element=tab[k] if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(not wartosc[1])then if(not wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]) and(((wartosc[4])and (#tabelka_parametrow_rodzica[name2]>0) )or((not wartosc[4])and(#tabelka_parametrow_rodzica[name2]==0))) )then return true; end; elseif(not wartosc[2] and wartosc[3])then return true; elseif(wartosc[2] and not wartosc[3])then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or(tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]==0)) )then return true; end; end; end; end; end; end; return false; end; local function inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,tak) local element=tab[k]; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if(wartosc[2])then if(not wartosc[3])then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then if(#tabelka_parametrow_rodzica[name2]>0)then if(tak)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; else return true; end; end; end; elseif((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; end; else local kind=obslugiwane(k); end; return false; end; local tab_konieczne_puste={}; local function inne_elementy_konieczne(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); return true; end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; if(element)then local tak=false; for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then return true; end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return false; end; local function inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local czy=false; if(element)then for name2, wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then return true; end; end; end; end; end; end; return czy; end; local strony_modul=require("Module:Strony"); local NumerPlik=function(k,v,zapytajnik,tryb) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)); elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then local u=strony_modul.SprawdzanieRozmiaruPliku{rozmiar=v,tryb=tryb,}; if not u then table.insert(invalid,argName(k)) end; end; end; local GrafikaPlik=function(k,v,zapytajnik,przestrzen) local czy_zapytajnik=(zapytajnik~="?"); local zero=(czy_zapytajnik and(#v==0)); if(zero)then table.insert(invalid, argName(k)) elseif((czy_zapytajnik)or((not czy_zapytajnik)and(#v~=0)))then if strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) else local g = strony_modul.SprawdzanieNazwyPlikowe{nazwa = v, ["przestrzeń"]=przestrzen, }; if not g then table.insert(invalid, argName(k)) end end; end; end; for k, v in pairs(tabelka_parametrow_rodzica) do required[k] = false; local kind,wykrzyknik,zapytajnik=obslugiwane(k) if k == "" then emptyArg = v elseif not kind or inne_elementy_nieobslugiwane(k) then table.insert(unknown, argName(k)) elseif inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(k,true) then table.insert(repeated, argName(k)); elseif (inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k)) then table.insert(empty, k); elseif (inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) ) then table.insert(noempty, k); elseif inne_elementy_konieczne(k) then table.insert(konieczne, k); else local old,__kind=mw.ustring.match(kind,"^%s*(old)%s*%+%s*(.-)%s*$"); if(not old or not __kind)then __kind,old=mw.ustring.match(kind,"^%s*(.-)%s*%+%s*(old)%s*$"); end; if(old and __kind)then table.insert(deprecated, argName(k)); kind=__kind; end; if(kind == "")then -- Kod pusty elseif (kind == "num") then if(zapytajnik~="?")then local n = tonumber(v) if not n then table.insert(invalid, argName(k)) end else local n = (#v == 0) or tonumber(v) if not n then table.insert(invalid, argName(k)) end end; elseif (kind == "uri") then if(zapytajnik~="?")then local u = strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end else local u = (#v == 0) or strony_modul.SprawdzanieURL(v) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="txt")then if(zapytajnik~="?")then if #v == 0 then table.insert(invalid, argName(k)) end; end; elseif (kind=="all")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)); else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; elseif(kind=="grafika")then GrafikaPlik(k,v,zapytajnik,false); elseif(kind=="grafika*")then GrafikaPlik(k,v,zapytajnik,true); elseif (kind == "text") then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; end; elseif(kind == "text-img")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieJakikolwiekStronHttp(v) if(u)then table.insert(exturl, argName(k)) end; end; end; end; elseif((kind == "text-link")or(kind == "tekst"))then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u= strony_modul.ZnajdowaniePlikowe(v); if(u)then table.insert(files, argName(k)) else local u = strony_modul.SprawdzanieURL(v); if u then table.insert(nakedurl, argName(k)) else local u = strony_modul.ZnajdowanieNormalnychStronHttp(v); if(u)then table.insert(nakedurl, argName(k)) end; end; end; end; elseif ((not old)and(kind == "old")) then table.insert(deprecated, argName(k)); elseif(kind == "uri*")then local zero=((zapytajnik~="?")and(#v==0)); if(zero)then table.insert(invalid, argName(k)) else local u = strony_modul.SprawdzanieURL(v) or strony_modul.SprawdzanieURL(mw.text.unstripNoWiki(v)) if not u then table.insert(invalid, argName(k)) end end; elseif(kind=="rozmiar")then NumerPlik(k,v,zapytajnik,false); elseif(kind=="rozmiar*")then NumerPlik(k,v,zapytajnik,true); elseif(kind~="")then local function regex(kind) local tab_pattern_wykrzyknik_lub_nie_wzorow={}; local pattern_poczatek=kind; local function funkcja_zbierajacy_dane_patternow(pattern_analiza_wzorow_koniunkcji) local tab_split_pattern_koniunkcji={}; local pattern_poczatek=pattern_analiza_wzorow_koniunkcji; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*&%s*(.*)%s*$"); if(pattern_poczatek_2 and pattern_koniec)then table.insert(tab_split_pattern_koniunkcji,pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if pattern_caly then table.insert(tab_split_pattern_koniunkcji,pattern_caly); end; end; until not pattern_poczatek_2; local tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji={}; for _,wartosc_elementu_koniunkcji in ipairs(tab_split_pattern_koniunkcji)do local wykrzyknik,pattern=mw.ustring.match(wartosc_elementu_koniunkcji,"^%s*(!?)%s*(^.-$)%s*$"); table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji,{[1]=pattern,[2]=wykrzyknik}); end; table.insert(tab_pattern_wykrzyknik_lub_nie_wzorow,tab_pattern_wykrzyknik_lub_nie_wzorow_koniunkcji); end; repeat local pattern_poczatek_2,pattern_koniec=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*|%s*(.*)%s*$"); if pattern_poczatek_2 and pattern_koniec then funkcja_zbierajacy_dane_patternow(pattern_poczatek_2); pattern_poczatek=pattern_koniec; else local pattern_caly=mw.ustring.match(pattern_poczatek,"^%s*(!?%s*^.-$)%s*$"); if(pattern_caly)then funkcja_zbierajacy_dane_patternow(pattern_caly); end; break; end; until not pattern_poczatek_2; if(#tab_pattern_wykrzyknik_lub_nie_wzorow>0)then for _ , tab_pattern_koniunkcja in ipairs(tab_pattern_wykrzyknik_lub_nie_wzorow) do local czy=true; for _,tab_pattern_elementy_koniunkcji in ipairs(tab_pattern_koniunkcja)do local pattern=tab_pattern_elementy_koniunkcji[1]; local wykrzyknik_negujacy_pattern=(tab_pattern_elementy_koniunkcji[2]=="!"); if(pattern)then if((not wykrzyknik_negujacy_pattern and mw.ustring.match(v, pattern))or(wykrzyknik_negujacy_pattern and not mw.ustring.match(v, pattern)))then czy=czy and true; if(not czy)then break; end; else czy=false; break; end; end end; if(czy)then return true;end; end; return false; end; return nil; end; if((zapytajnik)and((zapytajnik=="")or((zapytajnik=="?")and(#v>0))))then local wynik=regex(kind); if((type(wynik)~="nil")and(not wynik))then table.insert(invalid, argName(k)); elseif (#v > 0) and strony_modul.SprawdzanieURL(v) then table.insert(nakedurl, argName(k)) elseif strony_modul.ZnajdowanieNormalnychStronHttp(v) then table.insert(nakedurl, argName(k)) end; end; end end; end; local missing = {} local function inny_element2(k) local element=tab[k] if(element)then for name2,wartosc in pairs(element)do if((wartosc[2])and(k~=name2))then if((obslugiwane(name2))and(tabelka_parametrow_rodzica[name2]))then return true; end; end; end; end; for name,value in pairs(tab)do for name2,wartosc in pairs(value)do if((wartosc[2])and(name2==k)and(name2~=name))then if((obslugiwane(name))and(tabelka_parametrow_rodzica[name]))then return true; end; end; end; end; return false; end; for k, v in pairs(required) do if v and not inny_element2(k) then table.insert(missing, argName(k)) end end local czy_not_category=parametry_modul.CzyTak(tabelka_parametrow_rodzica["bez kategorii"]); local function Szablon_z_sprawdz_parametry() if(czy_not_category)then return "";end; local nazwy_modul=require("Module:Nazwy"); local nazwa_szablonu=szablonowe_modul.NazwaSzablonu(nazwy_modul["PEŁNANAZWASTRONY"]()); if(templateName==nazwa_szablonu)then local sprawdz_modul=require("Module:Sprawdź"); local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); return "[["..nazwy_np_modul.Category..":"..sprawdz_modul["NazwaKategoriiSprawdzaniaParametrówSzablonu"]().."|"..nazwy_modul["NAZWASTRONY"]().."]]"; end; return ""; end; local czy_missing=parametry_modul["CzySąElementyNumerowaneTablicy"](missing); local czy_konieczne=parametry_modul["CzySąElementyNumerowaneTablicy"](konieczne); local czy_unknown=parametry_modul["CzySąElementyNumerowaneTablicy"](unknown); local czy_invalid=parametry_modul["CzySąElementyNumerowaneTablicy"](invalid); local czy_deprecated=parametry_modul["CzySąElementyNumerowaneTablicy"](deprecated); local czy_repeated=parametry_modul["CzySąElementyNumerowaneTablicy"](repeated); local czy_empty=parametry_modul["CzySąElementyNumerowaneTablicy"](empty); local czy_noempty=parametry_modul["CzySąElementyNumerowaneTablicy"](noempty); local czy_files=parametry_modul["CzySąElementyNumerowaneTablicy"](files); local czy_nakedurl=parametry_modul["CzySąElementyNumerowaneTablicy"](nakedurl); local czy_exturl=parametry_modul["CzySąElementyNumerowaneTablicy"](exturl); if ((not czy_missing) and (not czy_konieczne) and (not czy_unknown) and (not czy_invalid) and (not czy_deprecated) and (not czy_repeated) and (not czy_empty) and (not czy_noempty) and (not czy_files) and (not czy_nakedurl) and (not czy_exturl) and (not emptyArg)) then return Szablon_z_sprawdz_parametry(); end local czy_informacje=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń dodatkowe informacje"])); local result; if(czy_informacje)then result=mw.html.create("span") result:addClass("problemy"); result:addClass("error"); result:css('white-space','pre-line'); result:css('font-size','unset'); end; local typ; local typ_jednostki; local czy_nazwij_jednostka=parametry_modul.CzyTak(tabelka_parametrow_rodzica["nazwij jednostką"]); ----[""]=?--- local config = frame.args[""] local class, space, category = string.match(config or "", "^%s*(%S+)(%s+)(.-)%s*$") local nl = space and string.match(space, "\n") or "" class = class or config ---- if(((czy_informacje)and(not czy_nazwij_jednostka))or((category)and((not czy_not_category)and(mw.ustring.match(category,"%%s.-%%s")))))then --local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local pudelko_modul=require("Module:Pudełko"); typ_jednostki=pudelko_modul["Typ jednostki 2"]{args={ ["obsługiwane jednostki jako nieopisowe strony"]="tak", ["nazwa przestrzeni nazw"]=pf and pf.args["tytuł przestrzeni nazw"] or frame.args["tytuł przestrzeni nazw"], ["nazwa jednostki"]=pf and pf.args["tytuł jednostki"] or frame.args["tytuł jednostki"], ["typ jednostki"]=pf and pf.args["rodzaj jednostki"] or frame.args["rodzaj jednostki"], },}; if(typ_jednostki=="artykuł")then typ="(artykuły)"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="(artykuły dla dzieci)"; elseif(typ_jednostki=="strona użytkownika")then typ="(strony użytkowników)"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="(strony brudnopisu projektu)"; else typ="(strony niepodręcznikowe)"; end; else typ=nil; end; if(czy_informacje)then if(not czy_nazwij_jednostka)then if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none"); result:css("color","black"); else result:css("color", "red") end else result:css("color", "red") end; end; local czy_warning=not (parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń ostrzeżenie"])); local message; if(czy_informacje or czy_warning)then local function tab_inne_elementy_konieczne(k) local element=tab[k] local tab_konieczne={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(obslugiwane(name2))then if((wartosc[1])and(not wartosc[2])and(wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not tab_konieczne[1])then tab_konieczne[1]={};end; table.insert(tab_konieczne_puste[1],argName(tonumber(name2) or name2)); end; elseif((wartosc[1])and(not wartosc[2])and(not wartosc[3]))then if(not tabelka_parametrow_rodzica[name2])then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[2])then tab_konieczne[2]={};end; table.insert(tab_konieczne[2],argName(tonumber(name2) or name2)); end; elseif(#tabelka_parametrow_rodzica[name2]>0)then if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then if(not tab_konieczne[3])then tab_konieczne[3]={};end; table.insert(tab_konieczne[3],argName(tonumber(name2) or name2)); end; end; end; end; end; end; end; return tab_konieczne; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if(obslugiwane(name2))then if( (not tabelka_parametrow_rodzica[name2]) or(#tabelka_parametrow_rodzica[name2]==0) )then if(not inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; --elseif((tabelka_parametrow_rodzica[name2]))and(#tabelka_parametrow_rodzica[name2]>0)then --if(inne_elementy_powtarzane_i_z_mozliwymi_dopuszczalnymi_pustymi_wartosciami(name2))then --return true; --end; end; end; end; end; end; end; end; return tab_konieczne_puste; end; local function tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(k) local element=tab[k]; local tab_konieczne_puste={}; if(element)then for name2,wartosc in pairs(element)do if(name2~=k)then if(wartosc[1])then if((not wartosc[4])and(not wartosc[2])and(not wartosc[3]))then if((obslugiwane(name2))and( (not tabelka_parametrow_rodzica[name2]) or((tabelka_parametrow_rodzica[name2])and(#tabelka_parametrow_rodzica[name2]>0)) ))then table.insert(tab_konieczne_puste,argName(tonumber(name2) or name2)); end; end; end; end; end; end; return tab_konieczne_puste; end; message=mw.html.create() if emptyArg then message:wikitext("Podano parametr o nazwie pustej o wartosci: |=", emptyArg, "|.<br/>") end if czy_missing then message:wikitext("Brakujące pola, które powinny być koniecznie podane: ", mw.text.listToText(missing), ".<br/>") end if czy_konieczne then for _,_konieczne in ipairs(konieczne) do local tab_element=tab_inne_elementy_konieczne(_konieczne); if(tab_element[1])then message:wikitext("Konieczne pola, które powinny być używane ze wszystkimi parametrami, dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[1])..".<br/>") end; if(tab_element[2])then message:wikitext("Konieczne pola, które nie istnieją, a inne też konieczne, ale są puste, dla parametru:"..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[2])..".<br/>") end; if(tab_element[3])then message:wikitext("Konieczne pola, które nie powinny być używane ze wszystkimi parametrami dla argumentu: "..argName(_konieczne)..", z listy: "..mw.text.listToText(tab_element[3])..".<br/>") end; end; end if czy_invalid then message:wikitext("Pola, mają nieprawidłową wartość, dla parametrów z listy: ", mw.text.listToText(invalid), ".<br/>") end if czy_unknown then message:wikitext("Nieznane pola używane przez szablon: ", mw.text.listToText(unknown), ".<br/>") end if czy_deprecated then message:wikitext("Przestarzałe pola, które są obsługiwane, ale których nie powinno się raczej używać: ", mw.text.listToText(deprecated), ".<br/>") end if czy_repeated then message:wikitext("Pola, o podanej wartości lub same pozycje, dla parametrów z listy: ", mw.text.listToText(repeated), ", nie powinny jednocześnie ze sobą współistnieć.<br/>") end if czy_empty then for _,_empty in ipairs(empty) do message:wikitext("Dla pola "..argName(_empty).." wykryto wartości z pustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_niepustymi_wartosciami(_empty))..", które, któreś z nich lub wszystkie, powinny być niepuste.<br/>") end; end if czy_noempty then for _,_noempty in ipairs(noempty) do message:wikitext("Dla pola "..argName(_noempty).." wykryto wartości z niepustymi polami: "..mw.text.listToText(tab_inne_elementy_z_mozliwymi_koniecznymi_pustymi_wartosciami(_noempty))..", które powinny być puste.<br/>") end; end if czy_files then for _,_files in ipairs(files) do message:wikitext("Dla pola "..argName(_files).." wykryto nieoczekiwaną grafikę: " .. mw.text.listToText(files) .. ".") end; end; if czy_nakedurl then for _,_nakedurl in ipairs(nakedurl) do message:wikitext("Dla pola "..argName(_nakedurl).." wykryto gołe linki: " .. mw.text.listToText(nakedurl) .. ".") end; end; if czy_exturl then for _,_exturl in ipairs(exturl) do message:wikitext("Dla pola "..argName(_exturl).." wykryto linki zewnętrzne: " .. mw.text.listToText(exturl) .. ".") end; end; end; local warning; if(czy_warning)then warning = mw.html.create('span'); warning:css('color','red'); warning:css('white-space','pre-line'); warning:css('word-break','break-all'); warning:addClass("problemy"); end; if(templateName)then mw.logObject(templateName, "templateName") local dwukropek=mw.ustring.match(templateName,"^%s*:"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](templateName); local wywolanie;local wywolanie2; local szablonowe_modul=require("Module:Szablonowe"); if dwukropek or nazwa_przestrzeni_strony~="" then wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then templateName=mw.ustring.gsub(templateName,"^%s*:",""); if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,templateName,typ); else category=mw.ustring.format(category,templateName); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(templateName,"%s+","-")); end; else wywolanie=szablonowe_modul["PokazanieWywołaniaSzablonu"](templateName,tabelka_parametrow_rodzica); wywolanie2="{{"..templateName.."}}"; if(parametry_modul.CzyTak(category))then local bez_pierwszej_litery=mw.ustring.match(templateName,"^.(.*)"); local czy_jest_wielka_litera=mw.ustring.match(bez_pierwszej_litery,"%u"); local szablon; if(not czy_jest_wielka_litera)then szablon=mw.getContentLanguage():lcfirst(templateName);else szablon=templateName;end; if(not czy_not_category)then if(typ)then category=mw.ustring.format(category,szablon,typ); else category=mw.ustring.format(category,szablon); end; category=pf:preprocess(category); end; class=mw.ustring.format(class,mw.ustring.gsub(szablon,"%s+","-")); end; end if(czy_warning)then local strong = mw.html.create('strong'); strong:wikitext("Wywołanie ") local span = mw.html.create('span'); span:css('font-weight','normal'); span:css('white-space','pre'); span:css('color',"brown"); span:wikitext(wywolanie); local strong2=mw.html.create('strong'); strong2:wikitext(" z wykrytymi parametrami z nieprawidłościami:<br/>"); warning:node(strong); warning:node(span); warning:node(strong2); end; if(czy_informacje)then local strong = mw.html.create('strong'); strong:wikitext("Szablon "..wywolanie2.." z wykrytymi parametrami z nieprawidłościami:<br/>"); result:node(strong); end; end; local czy_usun_linkowanie=parametry_modul.CzyTak(tabelka_parametrow_rodzica["usuń linkowanie"]); if(not czy_usun_linkowanie)then local _ = mw.title.new("Module:Sprawdź/Wywołanie funkcji/Parametry").id; end; if(czy_informacje or czy_warning)then message = tostring(message) end; if(czy_warning)then warning:wikitext(message); mw.addWarning(tostring(warning)); end; if czy_informacje and class then result:addClass(class) end if(czy_informacje)then result:wikitext(message);end; local str_category; if not czy_not_category and category then str_category=category; else str_category=""; end return nl..((czy_informacje)and tostring(result:allDone()) or "")..str_category..Szablon_z_sprawdz_parametry(); end, ["odn"] = function(frame) local pf = frame:getParent() local i = 1 local problems = false local yeardetected = false while true do local arg = pf.args[i] if not arg then problems = i == 1 and "brak argumentów" or false break end if (i > 5) or yeardetected then problems = "za dużo argumentów pozycyjnych" break end if #arg == 0 then problems = "pusty argument" break end if arg ~= mw.text.trim(arg) then problems = "nieoczekiwane odstępy na początku lub końcu argumentu" break end if string.match(arg, "^%d+%l?$") then yeardetected = true if i == 1 then problems = "rok musi być ostatnim parametrem po nazwiskach autorów" break end elseif string.match(arg, "^s[%-%.:]%s*%d+") then problems = "prawdopodobnie nieprawidłowo podany numer strony" break elseif string.match(arg, "%s%s") then problems = "podwójne odstępy" break elseif mw.ustring.match(arg, "^%a+%d") then if not mw.ustring.match(arg, "^[%u%d]+$") then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end elseif mw.ustring.match(arg, "^OdeB ") then -- [[Ordre de Bataille]] elseif mw.ustring.match(arg, "^%u%l+%u") then local justification = { ["De"] = true, ["Del"] = true, ["Di"] = true, ["Le"] = true, ["Mac"] = true, ["Mc"] = true, ["Te"] = true, -- TeSelle ["Sar"] = true, -- SarDesai ["Van"] = true, -- VanBuren ["La"] = true, -- LaSalle } if not justification[mw.ustring.match(arg, "^%u%l+")] then problems = "prawdopodobnie sklejone argumenty (brak pionowej kreski)" break end end i = i + 1 end if not problems then local odn = pf.args.odn if odn and ((#odn ~= 1) or (odn < "a") or (odn > "z")) then problems = "nieoczekiwany parametr odn" end end if not problems then local s = pf.args.s if s and string.match(s, "&[a-z]+;") then problems = "użyto encji HTML w numerze strony" end end if not problems then if pf.args.strona or pf.args.ss or pf.args.strony or pf.args.p or pf.args.page or pf.args.pp or pf.args.pages then problems = "przestarzały parametr z numerem strony" end end if not problems then return nil end local result = mw.html.create("span"):addClass("problemy-w-odn") local frame2=pf:newChild{args = {["obsługiwane jednostki jako nieopisowe strony"]="tak"}} local typ_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2) if typ_jednostki=="artykuł" or typ_jednostki=="artykuł dla dzieci" or typ_jednostki=="strona użytkownika" or typ_jednostki=="strona brudnopisu projektu" then result:css("display", "none") else result:css("color", "red") end local typ; if(typ_jednostki=="artykuł")then typ="artykuły"; elseif(typ_jednostki=="artykuł dla dzieci")then typ="artykuły dla dzieci"; elseif(typ_jednostki=="strona użytkownika")then typ="strony użytkowników"; elseif(typ_jednostki=="strona brudnopisu projektu")then typ="strony brudnopisu projektu"; else typ="strony niepodręcznikowe"; end; local kategorie_modul=require("Module:Kategorie"); local str_kategoria=kategorie_modul.Kategoria{args={[1]="Szablon odn ("..typ..") do sprawdzenia"}}; result:wikitext(str_kategoria); result:wikitext("ODN: ", problems) return tostring(result) end, ["Wikidane"] = function(frame) local property = frame.args.cecha local field = frame.args.pole local value = frame.args[1] if not property or not field then return end if not value then value = frame:getParent().args[field] if not value or (#value == 0) then return end end local entity = mw.wikibase.getEntity() if not entity or not entity.claims or not entity.claims[property] then return end for i, v in ipairs(entity.claims[property]) do if v.mainsnak.snaktype == "value" then if value == v.mainsnak.datavalue.value then return end end end local template = frame:getParent():getTitle() local infobox = mw.ustring.match(template, "^Szablon:(.- infobox)$") return mw.ustring.format("[[Kategoria:%s – niezgodność w Wikidanych – %s – %s]]", infobox and "Infoboksy" or "Szablony", infobox or template, field) end, ["bez parametrów"] = function(frame) for k, v in pairs(frame:getParent().args) do return nil end return "tak" end, ["pole z hostem"] = function (frame) local host = frame.args.host if host and (#host > 0) then for k, v in pairs(frame:getParent().args) do local link = string.match(v, "[hH][tT][tT][pP][sS]?://[%S]+") if link then local uri = mw.uri.new(link) local valid, _ = mw.uri.validate(uri) if valid and uri.host and (#uri.host > 0) then if host == uri.host then mw.logObject({k, link}, "cały") return k end if #host < #uri.host then local s1 = '.'..host local s2 = string.sub(uri.host, -#s1) if s1 == s2 then mw.logObject({k, link}, "fragment") return k end end end end end end end, ["pola z autorami"] = function (frame) local result = {} local nazwisko = frame.args["nazwisko"] local imie = frame.args["imię"] local autor = frame.args["autor"] local link = frame.args["link"] local maxIndex = tonumber(frame.args["max"]) local prefix = frame.args["przed"] or "" local suffix = frame.args["po"] or "" for i = 1, maxIndex do local s = i == 1 and "" or tostring(i) local nin = string.gsub(nazwisko, '#', s) local iin = string.gsub(imie, '#', s) local ain = string.gsub(autor, '#', s) local lin = string.gsub(link, '#', s) local niv = frame:getParent().args[nin] local iiv = frame:getParent().args[iin] local aiv = frame:getParent().args[ain] local liv = frame:getParent().args[lin] local nis = niv and (#niv > 0) local iis = iiv and (#iiv > 0) local ais = aiv and (#aiv > 0) local lis = liv and (#liv > 0) local bad = (nis and ais) -- nazwisko -> zbędny autor or (nis and not iis) -- nazwisko bez imienia or (lis and not nis and not ais) -- tylko link or (iis and not nis) -- imię bez nazwiska if bad then table.insert(result, i) end end if #result > 0 then return prefix..mw.text.listToText(result)..suffix end end, ["pola z gołymi linkami"] = function (frame) local result = {} for k, v in pairs(frame:getParent().args) do local link = string.match(v, "^[hH][tT][tT][pP][sS]?://[%S]+") if link then local justified = frame.args[k] if not justified then mw.logObject(v,k) table.insert(result, '"'..k..'"') end end end return mw.text.listToText(result) end, ["uri"] = function(frame) mw.logObject(frame:getParent():getTitle(), "parent:title") _ = mw.title.new("Moduł:Sprawdź/deprecated/uri").id local link = frame.args["link"] local space = frame.args["spacja"] local strony_modul=require("Module:Strony"); local check = strony_modul.SprawdzanieURL(link) if check then return link end return (space and (check ~= nil)) and link or "" end, ["url"] = function(frame) local link = frame.args[1] local okText = frame.args[2] or "ok" local isValid = string.find(link, '{{{') == 1 or checkUri(link) if isValid then return okText end return "" end, ["lista nazw niepustych argumentów"] = function(frame) local argNames = {} for k, v in pairs(frame:getParent().args) do if #mw.text.trim(v) > 0 then table.insert(argNames, tostring(k)) end end return table.concat(argNames, ", ") end, } 5yf3m8vymwvhzz248gaexlnwsl73mku Moduł:StronicowyParser/obiekty 828 45007 552413 546895 2026-08-19T06:00:11Z Persino 2851 552413 Scribunto text/plain local p={}; local m={}; p.wypowiedzi={ {"Twierdzenie", nil,nil,"Twierdzenia",2,"twierdzeniami","twierdzeń",}, {"Hipoteza",nil,nil,"Hipotezy", 2,"hipotezami","hipotez",}, {"Lemat", nil,nil,"Lematu",2,"lematami","lematów",}, {"Kryterium", nil,nil,"Kryterium",2,"kryteriami","kryteriów",}, {"Dowód", nil,nil,"Dowodu",2,"dowodami","dowodów",}, {"Postulat", nil,nil,"Postulatu",2,"postulatami","postulatów",}, {"Postulaty", nil,nil,"Postulatów",2,"grupami postulatów","grup postulatów",}, {"Określenie", nil,nil,"Określenia",2,"definicjami","definicji",}, {"Zadanie", nil,nil,"Zadania",2,"zadaniami","zadań",}, {"Praktyka",nil,nil,"Praktyki",2,"ćwiczeniami","ćwiczeń",}, {"Procedura",nil,nil,"Procedury",2,"procedurami","procedur",}, {"Schemat",nil,nil,"Schematu",2,"schematami","schematów",}, }; p.obiekty={"Obiekt",nil,nil,"Obiektu",2,"nienazwanymi obiektami","nienazwanych obiektów",}; p.normalne={ {"Wzór",{"Wzór2","CentrujWzór","CentrujWzór2","MathMLWzór","MathMLWzór2","CentrujMathMLWzór","CentrujMathMLWzór2",},nil,"Wzoru",2,"wzorami","wzorów",}, {"Rysunek",nil,nil,"Rysunku",2,"rysunkami","rysunków",}, {"Patrz",nil,nil,"Patrz",1,"patrzeniem","patrzenia",}, {"ZobaczTeż",nil,nil,"ZobaczTeż",1,"zobaczeniem też","zobaczenia też",}, }; p.napisy_wprowadzenia_tekstu={ {"Śródtytuł",nil,{"LinkŚródtytułTutaj",},"Śródtytułu",1,"nagłówkami","nagłówków",}, }; p.tekst={ {"Śródtekst",nil,nil,"Śródtekstu",2,"tekstami","tekstów",}, }; p.nazwa_szablonu_wprowadzenia_tekstu="Śródtytuł"; m.LinkiSzablonyNieNumerowane=function(tab_szablony_nienumerowane,czy_link) local function DalszeLinkiWprowadzeniaTekstu(linki_naglowka,t,i) if(type(linki_naglowka)=="table")then for _,wartosc in ipairs(linki_naglowka)do i=i+1; t[i]=wartosc; end; else i=i+1; t[i]=linki_naglowka; end; return t,i; end; local s={}; for _,wartosc in ipairs(tab_szablony_nienumerowane)do s[wartosc[1]]={}; local t=s[wartosc[1]]; local i=1; t[i]=(czy_link and "Link" or "Pobierz")..wartosc[1]; t,i=DalszeLinkiWprowadzeniaTekstu(wartosc[3],t,i); end; return s; end; m.LinkiSzablonyNapisuWprowadzeniaTekstu=function() return m.LinkiSzablonyNieNumerowane(p.napisy_wprowadzenia_tekstu,true); end; m.LinkiSzablonyTekstu=function() return m.LinkiSzablonyNieNumerowane(p.tekst,false); end; m.NienumerowaneSzablony=function(tab_szablony_nienumerowane) local s={}; for _,wartosc in ipairs(tab_szablony_nienumerowane)do s[wartosc[1]]=true; end; return s; end; m.NienumerowaneSzablonyNapisuWprowadzeniaTekstu=function() return m.NienumerowaneSzablony(p.napisy_wprowadzenia_tekstu); end; m.NienumerowaneSzablonyTekstu=function() return m.NienumerowaneSzablony(p.tekst); end; p.linki_szablony_wprowadzenia_tekstu=m.LinkiSzablonyNapisuWprowadzeniaTekstu(); p.nienumerowane_z_uchwytami_szablony_wprowadzenia_tekstu=m.NienumerowaneSzablonyNapisuWprowadzeniaTekstu(); p.linki_szablony_tekstu=m.LinkiSzablonyTekstu(); p.nienumerowane_z_uchwytami_szablony_tekstu=m.NienumerowaneSzablonyTekstu(); p.uklad_autonawigacji="Układ autonawigacji"; p.bez_uchwytow_spis_rzeczy_strony={ ["TOC"]=true, ["TOCRamka"]=true, }; p.szablony_z_lokalnym_spisem_rzeczy_strony={ ["TOC limit"]=true, ["Spis treści"]=true, ["TOCright"]=true, ["Spis treści zwinięty"]=true, }; p.szablony_kontenerowe={ ["Sekcja referencyjna"]=true, ["Sr"]=true, ---------------------------------- ["ListaNagłówkówKsiążki"]=true, ["LiniaArtykułuKsiążki"]=true, ---------------------------------- ["PomiędzyNagłówek"]=true, ["LosowyNagłówek"]=true, ["PierwszyNagłówek"]=true, ["OstatniNagłówek"]=true, ["LiczbaNagłówkówSpisu"]=true, ---------------------------------- ["AktualnaKsiążka"]=true, ["NastępnyArtykuł"]=true, ["PoprzedniArtykuł"]=true, ["NazwaAktualnyArtykuł"]=true, ["LinkAktualnaKsiążka"]=true, ["LinkNastępnyArtykuł"]=true, ["LinkPoprzedniArtykuł"]=true, ---------------------------------- ["LinkNastępnySubArtykuł"]=true, ["LinkPoprzedniSubArtykuł"]=true, ---------------------------------- ["PierwszyArtykuł"]=true, ["OstatniArtykuł"]=true, ["PomiędzyArtykuł"]=true, ["LosowyArtykuł"]=true, ["PobierzNazwęArtykułu"]=true, ["PobierzNumerArtykułu"]=true, ["NazwaLinkuArtykułu"]=true, -------------------------------- ["PobierzNazwęNagłówka"]=true, ["PobierzNumerNagłówka"]=true, --------------------------------- ["LiczbaArtykułówKsiążki"]=true, ["PoziomNazwyArtykułu"]=true, --------------------------------- ["SubNazwaNadArtykułu"]=true, ["NazwaNadArtykułu"]=true, ["LinkNazwaNadArtykułu"]=true, ["LinkSubNazwaNadArtykułu"]=true, ----------------------------------- ["Autonawigacja"]=true, }; p.szablony_stronicowe_niekontenerowe={ ["ArtykułSubst"]=true, }; p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; ----szablony stronicowego parsera function m.SzablonyStronicowegoParsera() local t={}; t.szablony_kontenerowe={}; local s=t.szablony_kontenerowe; t.szablony_wprowadzenia_tekstu={}; local r=t.szablony_wprowadzenia_tekstu; t.szablony_tekstu={}; local q=t.szablony_tekstu; local function SzablonyUchwytoweNapisuWprowadzeniaTekstu(naglowki,r) for _,szablony_naglowka in ipairs(naglowki) do r[szablony_naglowka[1]]=true; if(szablony_naglowka[2])then if(type(szablony_naglowka[2])=="table")then for _,wartosc in ipairs(szablony_naglowka[2])do r[wartosc]=true; end; else r[szablony_naglowka[2]]=true; end; end; end; end; SzablonyUchwytoweNapisuWprowadzeniaTekstu(p.napisy_wprowadzenia_tekstu,r); SzablonyUchwytoweNapisuWprowadzeniaTekstu(p.tekst,q); local function TabNumer(n,obiekty_szablon,s) if(obiekty_szablon[n])then if(type(obiekty_szablon[n])=="table")then for _,wartosc in ipairs(obiekty_szablon[n])do s[wartosc]=true; end; else s[obiekty_szablon[n]]=true; end; end; end; local function RozpatrywanaTablica(tab_obiekty,s,czy_link) for _,obiekty_szablon in ipairs(tab_obiekty)do s[obiekty_szablon[1]]=true; s[(czy_link and "Link" or "Pobierz")..obiekty_szablon[1]]=true; TabNumer(2,obiekty_szablon,s); TabNumer(3,obiekty_szablon,s); end; end; RozpatrywanaTablica(p.normalne,s,true); RozpatrywanaTablica(p.wypowiedzi,s,true); RozpatrywanaTablica(p.napisy_wprowadzenia_tekstu,s,true); RozpatrywanaTablica(p.tekst,s,false); TabNumer(2,p.obiekty,s); TabNumer(3,p.obiekty,s); local function IndeksowaneNaTak(tab_obiekty,s) for indeks,_ in pairs(tab_obiekty)do s[indeks]=true; end; end; IndeksowaneNaTak(p.bez_uchwytow_spis_rzeczy_strony,s); IndeksowaneNaTak(p.szablony_kontenerowe,s); return t; end; p.szablony_stronicowego_parsera=m.SzablonyStronicowegoParsera(); ----koniec szablony pudełka ----Tablica obiektów function m.TablicaObiektowychForm() local s={};local r={}; for _,element_w_tablicy_obiekty in pairs(p.normalne)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=true; end; for _,element_w_tablicy_obiekty in pairs(p.wypowiedzi)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=true; end; for _,element_w_tablicy_obiekty in pairs(p.napisy_wprowadzenia_tekstu)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=false; end; for _,element_w_tablicy_obiekty in pairs(p.tekst)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=false; element_w_tablicy_obiekty.CzyNum=false; end; for _,element_w_tablicy_obiekty in pairs(p.normalne)do r[#s+1]=element_w_tablicy_obiekty; end; for _,element_w_tablicy_obiekty in pairs(p.wypowiedzi)do r[#s+1]=element_w_tablicy_obiekty; end; p.tablica_mozliwych_obiektow_bez_obiektu_nienazwanego=s; p.tablica_mozliwych_numerowanych_obiektow_bez_obiektu_nienazwanego=r; s[#s+1]=p.obiekty; p.obiekty.CzyLink=true; p.obiekty.CzyNum=true; return s; end; ---- m.ElementyObiektoweNumerowaneINienumerowaneZUchwytami=function() local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do s[tab_obiektow[1]]={tab_obiektow[1],tab_obiektow[5],}; local tab_szablony=tab_obiektow[2]; if(tab_szablony)then if(type(tab_szablony)=="table")then for _,element in ipairs(tab_szablony)do s[element]={tab_obiektow[1],tab_obiektow[5],}; end; else s[tab_szablony]={tab_obiektow[1],tab_obiektow[5],}; end; end; end; end; local s={};local r={};local q={}; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); Obiekty(r,p.napisy_wprowadzenia_tekstu); Obiekty(q,p.tekst); return {numerowane_obiekty=s,nienumerowane_obiekty_napisu_wprowadzenia_tekstu=r,nienumerowane_obiekty_tekstu=q,}; end; p.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane=m.ElementyObiektoweNumerowaneINienumerowaneZUchwytami(); m.ElementyReferencjiObiektowychNumerowanychZUchwytami=function() local function Obiekty(s,linkobiekty,czy_link) for _,tab_obiektow in ipairs(linkobiekty)do s[(czy_link and "Link" or "Pobierz")..tab_obiektow[1]]=tab_obiektow[1]; local tab_szablony=tab_obiektow[3]; if(tab_szablony)then if(type(tab_szablony)=="table")then for _,element in ipairs(tab_szablony)do s[element]=tab_obiektow[1]; end; else s[tab_szablony]=tab_obiektow[1]; end; end; end; end; local s={};local r={};local q={}; Obiekty(s,p.wypowiedzi,true); Obiekty(s,p.normalne,true); Obiekty(r,p.napisy_wprowadzenia_tekstu,true); Obiekty(q,p.tekst,false); return {numerowane_obiekty=s,nienumerowane_obiekty_napisu_wprowadzenia_tekstu=r,nienumerowane_obiekty_tekstu=q,}; end; p.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane=m.ElementyReferencjiObiektowychNumerowanychZUchwytami(); m.FormatElementowyObiektowy=function() local s={}; local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do s[tab_obiektow[1]]=true; end; end; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); return s; end; p.format_elementowy_obiektowy=m.FormatElementowyObiektowy(); m.FormatElementowyReferencjiObiektowych=function() local s={}; local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do local element=mw.getContentLanguage():lcfirst(tab_obiektow[1]); s[element]=true; end; end; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); return s; end; p.format_elementowy_referencji_obiektowy=m.FormatElementowyReferencjiObiektowych(); ---- ---- p.tablica_obiektowych_form=m.TablicaObiektowychForm(); p.szablony_stron_zbiorczych={ ["KsiążkaSubst"]=true, ["StronaSubst"]=true, }; p.inne_szablony_stron_zbiorczych={ ["Sekcja referencyjna"]=true, ["Sr"]=true, } m.StronyZbiorcze=function() local s={}; local function Ziorcze(tab) for name,_ in pairs(tab)do s[name]=true; end; end; Ziorcze(p.szablony_stron_zbiorczych); Ziorcze(p.inne_szablony_stron_zbiorczych); return s; end; p.strona_zbiorcza=m.StronyZbiorcze(); p.strona_start_inne={ ["StandardowaStronaStart"]=true, ["PodstawowaStronaStart"]=true, ["ProstaStronaStart"]=true, }; p.strona_start={ ["StronaStart"]=true, }; p.strona_start_ze_spisem_rzeczy_strony={ ["UnikatowaStronaStart"]=true, ["UnikalnaStronaStart"]=true, ["SkomplikowanaStronaStart"]=true, }; p.strona_start_analiza_zaawansowana_spis_rzeczy_strony={ ["SkomplikowanaStronaStart"]=true, }; m.SzablonyFormartowaniaTekstu=function() local s={}; local function DodatDoTablicy(tab) for name,_ in pairs(tab)do s[name]=true; local name_koniec,_=mw.ustring.gsub(name,"Start$","Koniec"); s[name_koniec]=true; end; end; DodatDoTablicy(p.strona_start); DodatDoTablicy(p.strona_start_ze_spisem_rzeczy_strony); DodatDoTablicy(p.strona_start_analiza_zaawansowana_spis_rzeczy_strony); DodatDoTablicy(p.strona_start_inne); return s; end; p.szablony_stronicowe_formatowania_tekstu=m.SzablonyFormartowaniaTekstu(); p.tablica_nazw_ramek_lua={ "StronicowyParser", }; ----Koniec tablica obiektów p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, --[[["dedykacja"]=true,]] }; p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; --[[p.tablica_nazw_wprowadzenia_tekstu_dodatkowych={ ["bibliografia"]=true, ["literatura"]=true, };]] p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe={ [1]={"[ _\t]*'*[ _\t]*[Ll][Ii][Tt][Ee][Rr][Aa][Tt][Uu][Rr][Aa][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*",false,}, [2]={"[ _\t]*'*[ _\t]*[Bb][Ii][Bb][Ll][Ii][Oo][Gg][Rr][Aa][Ff][Ii][Aa][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*",true,}, }; p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2, }; p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; p.szablony_rozwijane_przez_javascript_nazwowe_linkowe={ }; p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, --[[["LinkGłówna"]=true, ["LinkWikijunior"]=true, ["LinkWikijunior2"]=true, ["LinkProjekt"]=true, ["LinkProjekt2"]=true, ["LinkUżytkownik"]=true, ["LinkUżytkownik2"]=true,]] }; p.kody_szablony_linkowe_przestrzenne={ ["Główna"]={"",}, ["Wikijunior"]={"Wikijunior",}, ["Kategoria"]={"Category",}, ["Plik"]={"File",}, ["Projekt"]={"Project",}, ["Szablon"]={"Template",}, ["Użytkownik"]={"User",}, ["Pomoc"]={"Help",}, ["Moduł"]={"Module",}, ["Komunikat"]={"MediaWiki",}, ["Specjalna"]={"Special",}, ["Wikiprojekt"]={"Wikiproject","w",}, ["Portal"]={"Portal","w",}, ["Extension"]={"Extension","mw",}, }; p.kody_inne_szablony_linkowe_inteligentne={ ["Sekcja referencyjna"]=true, ["Sr"]=true, }; p.kody_szablony_linkowe_projektowe={ ["Pedia"]="w", ["Źródła"]="s", ["Cytaty"]="q", ["News"]="n", ["Słownik"]="wikt", ["Podróże"]="voy", ["Wersytet"]="betawikiversity", ["Species"]="wikispecies", ["Commons"]="commons", ["Dane"]="d", ["MediaWiki"]="mw", ["MetaWiki"]="m", }; p.kody_szablony_linkowe_dialektu={ ["En"]="en", }; p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; p.szablony_inne_wprowadzenia_napisu_spisu_rzeczy={ ["HNumer"]=1, }; p.szablony_dokumentacji={ ["Dokumentacja"]=true, }; p.szablony_wykorzystywane_przez_strony_zbiorcze={ ["Sekcja referencyjna"]=true, ["Sr"]=true, }; p.szablony_licencji={ ["Licencja"]=true, }; p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; p.strony_main_page_projektu={ ["Wikijunior:Strona główna"]=true, ["Wikibooks:Strona główna"]=true, ["Strona główna"]=true, ["Main Page"]=true, } p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; p.szablony_przypisowe={ ["Przypisy"]=true, ["Uwagi"]=true, ["Przypisy-lista"]=true, }; p.napisy_wprowadzenia_tekstu_przypisowych={ ["Przypisy"]=true, ["Uwagi"]=true, ["Bibliografia"]=true, ["Licencja"]=true, }; p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, } p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; p.nazwy_przestrzeni_nazw_przekierowaniowe_linkowe_inteligentne={ ["g"]="Główna", ["c"]="Specjalna", ["k"]="Kategoria", ["f"]="Plik", ["m"]="Komunukat", ["d"]="Moduł", ["p"]="Pomoc", ["r"]="Projekt", ["s"]="Szablon", ["j"]="Wikijunior", ["ż"]="Użytkownik", ["e"]="Extension", ["x"]="Property", ["w"]="Wikiprojekt", ["t"]="Portal", }; p.nazwy_projektowe_serwisy_linkowe_inteligentne={ ["p"]="Pedia", ["h"]="EnPedia", ["s"]="Słownik", ["x"]="Cytaty", ["ź"]="Źródła", ["d"]="Podróże", ["g"]="Species", ["z"]="News", ["r"]="Wersytet", ["w"]="Wikia", ["c"]="Commons", ["n"]="Dane", ["k"]="MediaWiki", ["m"]="MetaWiki", ["b"]="En", }; p.przekierowania_szablonowe_linkowe_inteligentne_inne={ ["Lz"]="LinkURL", ["Lb"]="LinkWB", ["Sr"]="Sekcja referencyjna", ["Ly"]="Link wewnętrzny", }; p.nazwy_szablonowe_kolidacja={ --["Ltr"]=true, }; p.litery_przestrzeni_kolidacja={ --["ř"]="r", }; p.znaczniki_wprowadzenia_tekstu={ ["h1"]=1, ["h2"]=2, ["h3"]=3, ["h4"]=4, ["h5"]=5, ["h6"]=6, }; p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; p.szablony_linkowe_spisu_rzeczy={ ["Sekcja referencyjna"]={{"strona","s",1,},{"nazwa","n",2,},{"podstrona","p",3},{"ustęp","u",4},{"od małej","m"},{"od dużej","d",},{"nazwa przestrzeni nazw",},{"nazwa jednostki",},}, }; return p; kgk1bmc1r6ua2zk0ji49upaiwlniw6k 552421 552413 2026-08-19T09:31:07Z Persino 2851 Anulowano wersję [[Special:Diff/552413|552413]] autorstwa [[Special:Contributions/Persino|Persino]] ([[User talk:Persino|dyskusja]]) 552421 Scribunto text/plain local p={}; local m={}; p.wypowiedzi={ {"Twierdzenie", nil,nil,"Twierdzenia",2,"twierdzeniami","twierdzeń",}, {"Hipoteza",nil,nil,"Hipotezy", 2,"hipotezami","hipotez",}, {"Lemat", nil,nil,"Lematu",2,"lematami","lematów",}, {"Kryterium", nil,nil,"Kryterium",2,"kryteriami","kryteriów",}, {"Dowód", nil,nil,"Dowodu",2,"dowodami","dowodów",}, {"Postulat", nil,nil,"Postulatu",2,"postulatami","postulatów",}, {"Postulaty", nil,nil,"Postulatów",2,"grupami postulatów","grup postulatów",}, {"Określenie", nil,nil,"Określenia",2,"definicjami","definicji",}, {"Zadanie", nil,nil,"Zadania",2,"zadaniami","zadań",}, {"Praktyka",nil,nil,"Praktyki",2,"ćwiczeniami","ćwiczeń",}, {"Procedura",nil,nil,"Procedury",2,"procedurami","procedur",}, {"Schemat",nil,nil,"Schematu",2,"schematami","schematów",}, }; p.obiekty={"Obiekt",nil,nil,"Obiektu",2,"nienazwanymi obiektami","nienazwanych obiektów",}; p.normalne={ {"Wzór",{"Wzór2","CentrujWzór","CentrujWzór2","MathMLWzór","MathMLWzór2","CentrujMathMLWzór","CentrujMathMLWzór2",},nil,"Wzoru",2,"wzorami","wzorów",}, {"Rysunek",nil,nil,"Rysunku",2,"rysunkami","rysunków",}, {"Patrz",nil,nil,"Patrz",1,"patrzeniem","patrzenia",}, {"ZobaczTeż",nil,nil,"ZobaczTeż",1,"zobaczeniem też","zobaczenia też",}, }; p.napisy_wprowadzenia_tekstu={ {"Śródtytuł",nil,{"LinkŚródtytułTutaj",},"Śródtytułu",1,"nagłówkami","nagłówków",}, }; p.tekst={ {"Śródtekst",nil,nil,"Śródtekstu",2,"tekstami","tekstów",}, }; p.nazwa_szablonu_wprowadzenia_tekstu="Śródtytuł"; m.LinkiSzablonyNieNumerowane=function(tab_szablony_nienumerowane,czy_link) local function DalszeLinkiWprowadzeniaTekstu(linki_naglowka,t,i) if(type(linki_naglowka)=="table")then for _,wartosc in ipairs(linki_naglowka)do i=i+1; t[i]=wartosc; end; else i=i+1; t[i]=linki_naglowka; end; return t,i; end; local s={}; for _,wartosc in ipairs(tab_szablony_nienumerowane)do s[wartosc[1]]={}; local t=s[wartosc[1]]; local i=1; t[i]=(czy_link and "Link" or "Pobierz")..wartosc[1]; t,i=DalszeLinkiWprowadzeniaTekstu(wartosc[3],t,i); end; return s; end; m.LinkiSzablonyNapisuWprowadzeniaTekstu=function() return m.LinkiSzablonyNieNumerowane(p.napisy_wprowadzenia_tekstu,true); end; m.LinkiSzablonyTekstu=function() return m.LinkiSzablonyNieNumerowane(p.tekst,false); end; m.NienumerowaneSzablony=function(tab_szablony_nienumerowane) local s={}; for _,wartosc in ipairs(tab_szablony_nienumerowane)do s[wartosc[1]]=true; end; return s; end; m.NienumerowaneSzablonyNapisuWprowadzeniaTekstu=function() return m.NienumerowaneSzablony(p.napisy_wprowadzenia_tekstu); end; m.NienumerowaneSzablonyTekstu=function() return m.NienumerowaneSzablony(p.tekst); end; p.linki_szablony_wprowadzenia_tekstu=m.LinkiSzablonyNapisuWprowadzeniaTekstu(); p.nienumerowane_z_uchwytami_szablony_wprowadzenia_tekstu=m.NienumerowaneSzablonyNapisuWprowadzeniaTekstu(); p.linki_szablony_tekstu=m.LinkiSzablonyTekstu(); p.nienumerowane_z_uchwytami_szablony_tekstu=m.NienumerowaneSzablonyTekstu(); p.uklad_autonawigacji="Układ autonawigacji"; p.bez_uchwytow_spis_rzeczy_strony={ ["TOC"]=true, ["TOCRamka"]=true, }; p.szablony_z_lokalnym_spisem_rzeczy_strony={ ["TOC limit"]=true, ["Spis treści"]=true, ["TOCright"]=true, ["Spis treści zwinięty"]=true, }; p.szablony_kontenerowe={ ["Sekcja referencyjna"]=true, ["Sr"]=true, ---------------------------------- ["ListaNagłówkówKsiążki"]=true, ["LiniaArtykułuKsiążki"]=true, ---------------------------------- ["PomiędzyNagłówek"]=true, ["LosowyNagłówek"]=true, ["PierwszyNagłówek"]=true, ["OstatniNagłówek"]=true, ["LiczbaNagłówkówSpisu"]=true, ---------------------------------- ["AktualnaKsiążka"]=true, ["NastępnyArtykuł"]=true, ["PoprzedniArtykuł"]=true, ["NazwaAktualnyArtykuł"]=true, ["LinkAktualnaKsiążka"]=true, ["LinkNastępnyArtykuł"]=true, ["LinkPoprzedniArtykuł"]=true, ---------------------------------- ["LinkNastępnySubArtykuł"]=true, ["LinkPoprzedniSubArtykuł"]=true, ---------------------------------- ["PierwszyArtykuł"]=true, ["OstatniArtykuł"]=true, ["PomiędzyArtykuł"]=true, ["LosowyArtykuł"]=true, ["PobierzNazwęArtykułu"]=true, ["PobierzNumerArtykułu"]=true, ["NazwaLinkuArtykułu"]=true, -------------------------------- ["PobierzNazwęNagłówka"]=true, ["PobierzNumerNagłówka"]=true, --------------------------------- ["LiczbaArtykułówKsiążki"]=true, ["PoziomNazwyArtykułu"]=true, --------------------------------- ["SubNazwaNadArtykułu"]=true, ["NazwaNadArtykułu"]=true, ["LinkNazwaNadArtykułu"]=true, ["LinkSubNazwaNadArtykułu"]=true, ----------------------------------- ["Autonawigacja"]=true, }; p.szablony_stronicowe_niekontenerowe={ ["ArtykułSubst"]=true, }; p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; ----szablony stronicowego parsera function m.SzablonyStronicowegoParsera() local t={}; t.szablony_kontenerowe={}; local s=t.szablony_kontenerowe; t.szablony_wprowadzenia_tekstu={}; local r=t.szablony_wprowadzenia_tekstu; t.szablony_tekstu={}; local q=t.szablony_tekstu; local function SzablonyUchwytoweNapisuWprowadzeniaTekstu(naglowki,r) for _,szablony_naglowka in ipairs(naglowki) do r[szablony_naglowka[1]]=true; if(szablony_naglowka[2])then if(type(szablony_naglowka[2])=="table")then for _,wartosc in ipairs(szablony_naglowka[2])do r[wartosc]=true; end; else r[szablony_naglowka[2]]=true; end; end; end; end; SzablonyUchwytoweNapisuWprowadzeniaTekstu(p.napisy_wprowadzenia_tekstu,r); SzablonyUchwytoweNapisuWprowadzeniaTekstu(p.tekst,q); local function TabNumer(n,obiekty_szablon,s) if(obiekty_szablon[n])then if(type(obiekty_szablon[n])=="table")then for _,wartosc in ipairs(obiekty_szablon[n])do s[wartosc]=true; end; else s[obiekty_szablon[n]]=true; end; end; end; local function RozpatrywanaTablica(tab_obiekty,s,czy_link) for _,obiekty_szablon in ipairs(tab_obiekty)do s[obiekty_szablon[1]]=true; s[(czy_link and "Link" or "Pobierz")..obiekty_szablon[1]]=true; TabNumer(2,obiekty_szablon,s); TabNumer(3,obiekty_szablon,s); end; end; RozpatrywanaTablica(p.normalne,s,true); RozpatrywanaTablica(p.wypowiedzi,s,true); RozpatrywanaTablica(p.napisy_wprowadzenia_tekstu,s,true); RozpatrywanaTablica(p.tekst,s,false); TabNumer(2,p.obiekty,s); TabNumer(3,p.obiekty,s); local function IndeksowaneNaTak(tab_obiekty,s) for indeks,_ in pairs(tab_obiekty)do s[indeks]=true; end; end; IndeksowaneNaTak(p.bez_uchwytow_spis_rzeczy_strony,s); IndeksowaneNaTak(p.szablony_kontenerowe,s); return t; end; p.szablony_stronicowego_parsera=m.SzablonyStronicowegoParsera(); ----koniec szablony pudełka ----Tablica obiektów function m.TablicaObiektowychForm() local s={};local r={}; for _,element_w_tablicy_obiekty in pairs(p.normalne)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=true; end; for _,element_w_tablicy_obiekty in pairs(p.wypowiedzi)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=true; end; for _,element_w_tablicy_obiekty in pairs(p.napisy_wprowadzenia_tekstu)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=true; element_w_tablicy_obiekty.CzyNum=false; end; for _,element_w_tablicy_obiekty in pairs(p.tekst)do s[#s+1]=element_w_tablicy_obiekty; element_w_tablicy_obiekty.CzyLink=false; element_w_tablicy_obiekty.CzyNum=false; end; for _,element_w_tablicy_obiekty in pairs(p.normalne)do r[#s+1]=element_w_tablicy_obiekty; end; for _,element_w_tablicy_obiekty in pairs(p.wypowiedzi)do r[#s+1]=element_w_tablicy_obiekty; end; p.tablica_mozliwych_obiektow_bez_obiektu_nienazwanego=s; p.tablica_mozliwych_numerowanych_obiektow_bez_obiektu_nienazwanego=r; s[#s+1]=p.obiekty; p.obiekty.CzyLink=true; p.obiekty.CzyNum=true; return s; end; ---- m.ElementyObiektoweNumerowaneINienumerowaneZUchwytami=function() local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do s[tab_obiektow[1]]={tab_obiektow[1],tab_obiektow[5],}; local tab_szablony=tab_obiektow[2]; if(tab_szablony)then if(type(tab_szablony)=="table")then for _,element in ipairs(tab_szablony)do s[element]={tab_obiektow[1],tab_obiektow[5],}; end; else s[tab_szablony]={tab_obiektow[1],tab_obiektow[5],}; end; end; end; end; local s={};local r={};local q={}; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); Obiekty(r,p.napisy_wprowadzenia_tekstu); Obiekty(q,p.tekst); return {numerowane_obiekty=s,nienumerowane_obiekty_napisu_wprowadzenia_tekstu=r,nienumerowane_obiekty_tekstu=q,}; end; p.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane=m.ElementyObiektoweNumerowaneINienumerowaneZUchwytami(); m.ElementyReferencjiObiektowychNumerowanychZUchwytami=function() local function Obiekty(s,linkobiekty,czy_link) for _,tab_obiektow in ipairs(linkobiekty)do s[(czy_link and "Link" or "Pobierz")..tab_obiektow[1]]=tab_obiektow[1]; local tab_szablony=tab_obiektow[3]; if(tab_szablony)then if(type(tab_szablony)=="table")then for _,element in ipairs(tab_szablony)do s[element]=tab_obiektow[1]; end; else s[tab_szablony]=tab_obiektow[1]; end; end; end; end; local s={};local r={};local q={}; Obiekty(s,p.wypowiedzi,true); Obiekty(s,p.normalne,true); Obiekty(r,p.napisy_wprowadzenia_tekstu,true); Obiekty(q,p.tekst,false); return {numerowane_obiekty=s,nienumerowane_obiekty_napisu_wprowadzenia_tekstu=r,nienumerowane_obiekty_tekstu=q,}; end; p.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane=m.ElementyReferencjiObiektowychNumerowanychZUchwytami(); m.FormatElementowyObiektowy=function() local s={}; local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do s[tab_obiektow[1]]=true; end; end; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); return s; end; p.format_elementowy_obiektowy=m.FormatElementowyObiektowy(); m.FormatElementowyReferencjiObiektowych=function() local s={}; local function Obiekty(s,obiekty) for _,tab_obiektow in ipairs(obiekty)do local element=mw.getContentLanguage():lcfirst(tab_obiektow[1]); s[element]=true; end; end; Obiekty(s,p.wypowiedzi); Obiekty(s,p.normalne); return s; end; p.format_elementowy_referencji_obiektowy=m.FormatElementowyReferencjiObiektowych(); ---- ---- p.tablica_obiektowych_form=m.TablicaObiektowychForm(); p.szablony_stron_zbiorczych={ ["KsiążkaSubst"]=true, ["StronaSubst"]=true, }; p.inne_szablony_stron_zbiorczych={ ["Sekcja referencyjna"]=true, ["Sr"]=true, } m.StronyZbiorcze=function() local s={}; local function Ziorcze(tab) for name,_ in pairs(tab)do s[name]=true; end; end; Ziorcze(p.szablony_stron_zbiorczych); Ziorcze(p.inne_szablony_stron_zbiorczych); return s; end; p.strona_zbiorcza=m.StronyZbiorcze(); p.strona_start_inne={ ["StandardowaStronaStart"]=true, ["PodstawowaStronaStart"]=true, ["ProstaStronaStart"]=true, }; p.strona_start={ ["StronaStart"]=true, }; p.strona_start_ze_spisem_rzeczy_strony={ ["UnikatowaStronaStart"]=true, ["UnikalnaStronaStart"]=true, ["SkomplikowanaStronaStart"]=true, }; p.strona_start_analiza_zaawansowana_spis_rzeczy_strony={ ["SkomplikowanaStronaStart"]=true, }; m.SzablonyFormartowaniaTekstu=function() local s={}; local function DodatDoTablicy(tab) for name,_ in pairs(tab)do s[name]=true; local name_koniec,_=mw.ustring.gsub(name,"Start$","Koniec"); s[name_koniec]=true; end; end; DodatDoTablicy(p.strona_start); DodatDoTablicy(p.strona_start_ze_spisem_rzeczy_strony); DodatDoTablicy(p.strona_start_analiza_zaawansowana_spis_rzeczy_strony); DodatDoTablicy(p.strona_start_inne); return s; end; p.szablony_stronicowe_formatowania_tekstu=m.SzablonyFormartowaniaTekstu(); p.tablica_nazw_ramek_lua={ "StronicowyParser", }; ----Koniec tablica obiektów p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, --[[["dedykacja"]=true,]] }; p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; --[[p.tablica_nazw_wprowadzenia_tekstu_dodatkowych={ ["bibliografia"]=true, ["literatura"]=true, };]] p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe={ [1]={"[ _\t]*'*[ _\t]*[Ll][Ii][Tt][Ee][Rr][Aa][Tt][Uu][Rr][Aa][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*",false,}, [2]={"[ _\t]*'*[ _\t]*[Bb][Ii][Bb][Ll][Ii][Oo][Gg][Rr][Aa][Ff][Ii][Aa][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*",true,}, }; p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={ ["Kolumny"]=2, }; p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; p.szablony_z_dodatkiem_obiektowym={ ["ISBN"]="ISBN $(1)"; }; p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; p.szablony_rozwijane_przez_javascript_nazwowe_linkowe={ }; p.szablony_do_usuwania_z_tekstu={ --- szablony książkowe umieszczane na stronie głównej podręcznika ["Kolekcja"]=true, ["TODO"]=true, ["Wersja do druku"]=true, --- szablony typowo linkowe ["Dane tekstu"]=true, --- szablony linkowania do innych projektow ["MediaWiki"]=true, ["Wikipedia"]=true, ["Wikipedia kat"]=true, ["Wikipedia2"]=true, ["Commons"]=true, ["Commons ilustr kat"]=true, ["Commonsall"]=true, ["Commonscat"]=true, ["Wikiatlas"]=true, ["Wikicytaty"]=true, ["Wikicytaty przysłowia"]=true, ["Inkubator"]=true, ["Meta"]=true, ["Wikinews"]=true, ["Wikinewscat"]=true, ["Wikinewsy"]=true, ["Portal Wikinews"]=true, ["Wikisłownik"]=true, ["Wikisłownik-cat"]=true, ["Wikimedia"]=true, ["Multiwmpl"]=true, ["Wikipodróże"]=true, ["Wikispecies"]=true, ["Multisource"]=true, ["Wikiźródła"]=true, ["Wikiźródła autor"]=true, ["Wikiźródła kat"]=true, ["Wikiźródła kuch kat"]=true, ["Wikiźródła krótki"]=true, ["Wikisource-lang"]=true, }; p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, --[[["LinkGłówna"]=true, ["LinkWikijunior"]=true, ["LinkWikijunior2"]=true, ["LinkProjekt"]=true, ["LinkProjekt2"]=true, ["LinkUżytkownik"]=true, ["LinkUżytkownik2"]=true,]] }; p.kody_szablony_linkowe_przestrzenne={ ["Główna"]={"",}, ["Wikijunior"]={"Wikijunior",}, ["Kategoria"]={"Category",}, ["Plik"]={"File",}, ["Projekt"]={"Project",}, ["Szablon"]={"Template",}, ["Użytkownik"]={"User",}, ["Pomoc"]={"Help",}, ["Moduł"]={"Module",}, ["Komunikat"]={"MediaWiki",}, ["Specjalna"]={"Special",}, ["Wikiprojekt"]={"Wikiproject","w",}, ["Portal"]={"Portal","w",}, ["Extension"]={"Extension","mw",}, }; p.kody_inne_szablony_linkowe_inteligentne={ ["Sekcja referencyjna"]=true, ["Sr"]=true, }; p.kody_szablony_linkowe_projektowe={ ["Pedia"]="w", ["Źródła"]="s", ["Cytaty"]="q", ["News"]="n", ["Słownik"]="wikt", ["Podróże"]="voy", ["Wersytet"]="betawikiversity", ["Species"]="wikispecies", ["Commons"]="commons", ["Dane"]="d", ["MediaWiki"]="mw", ["MetaWiki"]="m", }; p.kody_szablony_linkowe_dialektu={ ["En"]="en", }; p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; p.szablony_w_nie_w_tej_samej_linii={ ["SpisPozycja"]=true, ["SpisZw"]=true, ["SpisTreści"]=true, }; p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; p.szablony_dokumentacji={ ["Dokumentacja"]=true, }; p.szablony_wykorzystywane_przez_strony_zbiorcze={ ["Sekcja referencyjna"]=true, ["Sr"]=true, }; p.szablony_licencji={ ["Licencja"]=true, }; p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; p.szablony_bez_generowania_napisowego={ ["Status"]=true, }; p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={ ["Rozdział"]=true, ["Podrozdział"]=true, ["MapaObrazu"]=true, }; p.strony_main_page_projektu={ ["Wikijunior:Strona główna"]=true, ["Wikibooks:Strona główna"]=true, ["Strona główna"]=true, ["Main Page"]=true, } p.szablony_nie_typowo_linkowe={ ["Plik"]=true, ["Kategoria"]=true, ["Kategorie"]=true, ["Wolumin"]=true, ["SortWolumin"]=true, ["SortKuchWolumin"]=true, }; p.szablony_przypisowe={ ["Przypisy"]=true, ["Uwagi"]=true, ["Przypisy-lista"]=true, }; p.napisy_wprowadzenia_tekstu_przypisowych={ ["Przypisy"]=true, ["Uwagi"]=true, ["Bibliografia"]=true, ["Licencja"]=true, }; p.magiczne_derektywy={ ["TOC"]=true, ["NOTOC"]=true, ["NOEDITSECTION"]=true, } p.znaczniki_szablonowe={ ["Znacznik"]=1, ["Div"]=1, ["Code"]=1, ["Tt"]=1, ["P"]=1, ["Sub"]=1, ["Sup"]=1, ["Span"]=1, ["Bdo"]=1, ["Small"]=1, ["Big"]=1, ["Strong"]=1, }; p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; p.nazwy_przestrzeni_nazw_przekierowaniowe_linkowe_inteligentne={ ["g"]="Główna", ["c"]="Specjalna", ["k"]="Kategoria", ["f"]="Plik", ["m"]="Komunukat", ["d"]="Moduł", ["p"]="Pomoc", ["r"]="Projekt", ["s"]="Szablon", ["j"]="Wikijunior", ["ż"]="Użytkownik", ["e"]="Extension", ["x"]="Property", ["w"]="Wikiprojekt", ["t"]="Portal", }; p.nazwy_projektowe_serwisy_linkowe_inteligentne={ ["p"]="Pedia", ["h"]="EnPedia", ["s"]="Słownik", ["x"]="Cytaty", ["ź"]="Źródła", ["d"]="Podróże", ["g"]="Species", ["z"]="News", ["r"]="Wersytet", ["w"]="Wikia", ["c"]="Commons", ["n"]="Dane", ["k"]="MediaWiki", ["m"]="MetaWiki", ["b"]="En", }; p.przekierowania_szablonowe_linkowe_inteligentne_inne={ ["Lz"]="LinkURL", ["Lb"]="LinkWB", ["Sr"]="Sekcja referencyjna", ["Ly"]="Link wewnętrzny", }; p.nazwy_szablonowe_kolidacja={ --["Ltr"]=true, }; p.litery_przestrzeni_kolidacja={ --["ř"]="r", }; p.znaczniki_wprowadzenia_tekstu={ ["h1"]=1, ["h2"]=2, ["h3"]=3, ["h4"]=4, ["h5"]=5, ["h6"]=6, }; p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; p.szablony_linkowe_spisu_rzeczy={ ["Sekcja referencyjna"]={{"strona","s",1,},{"nazwa","n",2,},{"podstrona","p",3},{"ustęp","u",4},{"od małej","m"},{"od dużej","d",},{"nazwa przestrzeni nazw",},{"nazwa jednostki",},}, }; return p; kruj15x90v0nm6010gf1qmgrj3k3eyy Szablon:NAZWASERWISU/opis 10 50756 552402 552359 2026-08-19T04:45:49Z Persino 2851 /* Użycie */ 552402 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|link}} ({{s|NS|link{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|wikipedia{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kod projektu}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|wikipedia{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> 28gws2ulq6rd1poa4vtkgwlxo8ohvdj 552403 552402 2026-08-19T04:50:48Z Persino 2851 /* Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} */ 552403 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|wikipedia{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kod projektu}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> iraswtz5t35d6gam647hbd675ujt5fe 552404 552403 2026-08-19T04:51:36Z Persino 2851 /* Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} */ 552404 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kod projektu}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> h12f56fef8a62of4nubkj3twsai0seg 552405 552404 2026-08-19T04:53:03Z Persino 2851 /* Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} */ 552405 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> 8u5lfr4tla9piv7ovn453tfs5qxweph 552406 552405 2026-08-19T04:54:40Z Persino 2851 /* Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} */ 552406 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} (przy pomocy szablonu {{s|Code}}) dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> tgqip5v8uo86s82arots2n8ml8742gq 552407 552406 2026-08-19T05:06:08Z Persino 2851 /* Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} */ 552407 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, musimy zastosować {{Parametr|kj}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} (przy pomocy szablonu {{s|Code}}) dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> h15os13rtx9fojc90kq4hr1402h4kwj 552408 552407 2026-08-19T05:21:29Z Persino 2851 552408 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. Skrótem dla szablonu: {{Code|{{s|NAZWASERWISU}}}}, jest: {{Code|{{s|NS}}}}. ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, musimy zastosować {{Parametr|kj}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} (przy pomocy szablonu {{s|Code}}) dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> jdba40o2mzxhp5jd8eud49p7tl6gepq 552409 552408 2026-08-19T05:22:45Z Persino 2851 /* Użycie */ 552409 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. == Skrót (przekierowanie) == Skrótem (przekierowaniem) dla szablonu: {{Code|{{s|NAZWASERWISU}}}}, jest: {{Code|{{s|NS}}}}. == Parametry == ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|kp}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, musimy zastosować {{Parametr|kj}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} (przy pomocy szablonu {{s|Code}}) dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> fv1ffby0c3mio03i4v2hsz9cc6cnflr 552410 552409 2026-08-19T05:24:48Z Persino 2851 /* Parametry */ 552410 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Module:Nazwy}} {{Skrót szablonu|NS}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na {{lpg|Wikipedia|Wikipedii}}, w jakieś podanej wersji językowej. == Skrót (przekierowanie) == Skrótem (przekierowaniem) dla szablonu: {{Code|{{s|NAZWASERWISU}}}}, jest: {{Code|{{s|NS}}}}. == Parametry == ; Parametry nietechniczne{{dk}} * postać bezparametrowa - gdy chcemy uzyskać nazwę lokalnego serwisu, * {{Code|n}}, {{Code|nazwa}} lub {{Code|1}} - nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem: {{Code|l}} (skrót) lub {{Code|link}}), * {{Code|pk}} lub {{Code|przypadek}} - lub zamiast pierwszego parametru, ma być wyświetlana nazwa określana przez przypadek, tą zmienną jest właśnie odmiana rzeczowników, które nazywa się: '''przypadkami''', * {{Code|z}} lub {{Code|za}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą linku, * {{Code|p}} lub {{Code|po}} - dokończenie nazwy linku do zmiennej {{Code|1}} lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem, * {{Code|l}} lub {{Code|link}} - wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki), * {{Code|w}} lub {{Code|wikipedia}} - zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: ** {{Code|wikipedia}} - gdy chcemy linkować do artykułu o danej wiki na danej {{NS|l=tak|w=tak|pk=mj|k=w}}, wartość niepusta, ** inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta, * {{Code|k}} lub {{Code|klucz projektu}} - klucz projektu, używany zamiast: {{Code|kod języka}} i {{Code|kod projektu}}, * {{Code|kj}} lub {{Code|kod języka}} - kod do wersji językowej projektu danej wiki, używany zamiast {{Code|klucz projektu}}, * {{Code|kp}} lub {{Code|kod projektu}} - kod projektu danej wiki, używany zamiast: {{Code|klucz projektu}}, * {{Code|jw}} lub {{Code|w języku wiki}} - jeśli nie pusta, to wyświetl nazwę projektu w jego język. ; Parametry techniczne{{dk}} * {{Code|bz}} lub {{Code|bez znaczników}} - szablon drukuje link bez otoczki linku wewnętrznego mechanizmu '''MediaWiki''', * {{Code|bp}} lub {{Code|bez przetwarzania}} - szablon drukuje link bez przetwarzania wewnętrznego linkowego. ---- Wszystkie powyższe zmienne są opcjonalne. == Opis parametrów użytych razem z parametrem: {{Code|l}} (skrót) lub {{Code|link}} == Szablon przyjmuje parametr opcjonalny {{Code|l}} ({{s|NS|l{{=}}tak}}), dzięki któremu jest wyświetlany link, do strony głównej tego projektu, w postaci: {{Code|{{NS|l=tak}}}}, o nazwie linku, będącą jednocześnie nazwą serwisu projektu '''{{NS|l=tak}}'''. Gdy dodamy parametr {{Code|w{{=}}tak}} do wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak}}}}, wtedy uzyskamy wynik: {{Code|{{NS|l=tak|w=tak}}}}, w innym przypadku, gdy linkujemy do angielskiej {{lhg|Wikipedia|Wikipedii}}, musimy zastosować {{Parametr|kj}}, wtedy dla wywołania {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}}}} mamy: {{Code|{{NS|l=tak|w=tak|kj=en}}}}, a w przypadku angielskiego {{lhg|Wikibooks|po=a}} dla wikikodu {{Code|{{s|NS|l{{=}}tak|kj{{=}}en}}}} mamy wynik w postaci: {{Code|{{NS|l=tak|kj=en}}}}, a jeśli użyjemy parametru {{Code|kp}}, wtedy wywołanie {{Code|{{s|NS|l{{=}}tak|kp{{=}}s}}}}, to mamy: {{Code|{{NS|l=tak|kp=s}}}}, a gdy dodamy dodatkowo {{Code|w{{=}}tak}}, zatem {{Code|{{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}}}} jest o wyniku: {{Code|{{NS|l=tak|w=tak|kp=s}}}}. * Wyniki z parametrem: {{Parametr|l|tak}} (skrótowo) lub {{Parametr|link|tak}} zostały obtoczone znacznikiem {{Tag|code}} (przy pomocy szablonu {{s|Code}}) dla odróżnienia rezultatu od reszty tekstu. == Odmiany przez przypadki == ; Dla projektu{{dk}} {{NS|k=w|l=tak}}, odmiany przez przypadki{{dk}} * {{NS|k=w|pk=m|l=tak}} - '''mianownik''' (skrót: '''m'''), * {{NS|k=w|pk=d|l=tak}} - '''dopełniacz''' (skrót: '''d'''), * {{NS|k=w|pk=c|l=tak}} - '''celownik''' (skrót: '''c'''), * {{NS|k=w|pk=b|l=tak}} - '''biernik''' (skrót: '''b'''), * {{NS|k=w|pk=mj|l=tak}} - '''miejscownik''' (skrót: '''mj'''), * {{NS|k=w|pk=n|l=tak}} - '''nadrzędnik''' (skrót: '''n'''), * {{NS|k=w|pk=w|l=tak}} - '''wołacz''' (skrót: '''w'''). Szablon ma parametr: {{Parametr|przypadek}} (skrót: {{Parametr|pk}}), ma wartości o powyższym zapisie w postaci, pełnej i skrótowej, dla danego przypadku, zapisane jako wytłuszczony tekst. == Przykłady == ==== Wywołania szablonu dotyczące tego projektu ==== * {{s|NS}} → {{NS}}, * {{s|NS|l{{=}}tak}} → {{NS|l=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak}} → {{NS|l=tak|w=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|kj=pl}}, * {{s|NS|l{{=}}tak|kj{{=}}en}} → {{NS|l=tak|kj=en}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl}} → {{NS|l=tak|w=tak|kj=pl}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en}} → {{NS|l=tak|w=tak|kj=en}}. ==== Wywołanie szablonu dotyczące innego projektu niż ten ==== * {{s|NS|l{{=}}tak|kp{{=}}s}} → {{NS|l=tak|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s}} → {{NS|l=tak|w=tak|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|kj=en|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=pl|kp=s}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s}} → {{NS|l=tak|w=tak|kj=en|kp=s}}. ==== Wywołania szablonu z nazwą lu danej wiki ==== * {{s|NS|l{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|kj=en|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}pl|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=pl|kp=s|jw=tak}}, * {{s|NS|l{{=}}tak|w{{=}}tak|kj{{=}}en|kp{{=}}s|jw{{=}}tak}} → {{NS|l=tak|w=tak|kj=en|kp=s|jw=tak}}. ==== Wywołanie szablonu z podaną nazwą linku ==== * {{s|NS|Biblioteka książek|l{{=}}tak}} → {{NS|Biblioteka książek|l=tak}}, * {{s|NS|Biblioteka książek|l{{=}}tak|w{{=}}tak}} → {{NS|Biblioteka książek|l=tak|w=tak}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|kp=s|kj=en}}, * {{s|NS|Biblioteka wikiźródeł|l{{=}}tak|w{{=}}tak|kp{{=}}s|kj{{=}}en}} → {{NS|Biblioteka wikiźródeł|l=tak|w=tak|kp=s|kj=en}}. == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Nazwa wyświetlana linku (opcjonalna, domyślnie nazwa danej wiki, używana jedynie z parametrem link).", "type": "wiki-page-name", "aliases": [ "nazwa, n" ] }, "za": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za nazwą link.", "type": "string", "aliases": [ "z" ] }, "po": { "description": "Dokończenie nazwy linku do zmiennej 1 lub bez tej zmiennej, ale do nazwy wygenerowanej automatycznie, wstawianym bezpośrednio za linkiem.", "type": "string", "aliases": [ "p" ] }, "link": { "description": "Wartość niepusta, gdy chcemy linkować (domyślnie do strony głównej projektu danej wiki, gdy ten parametr jest sam, to do lokalnej wiki).", "type": "string", "aliases": [ "l" ] }, "wikipedia": { "description": "Zmienna przyjmująca dwie możliwe rodzaje wartości pozwalająca wyświetlić wyniki dotyczące projektu danej wiki na dwóch możliwych rodzajów projektach następujących: wikipedia - gdy chcemy linkować do artykułu o danej wiki na Wikipedii, wartość niepusta, inny projekt - gdy chcemy linkować do strony głównej serwisu danej wiki, wartość pusta.", "type": "string", "aliases": [ "w" ] }, "klucz projektu": { "description": "Klucz projektu, używany zamiast: kod języka i kod projektu.", "aliases": [ "k" ] }, "kod języka": { "description": "Kod do wersji językowej projektu danej wiki, używany zamiast klucz projektu.", "aliases": [ "kj" ] }, "kod projektu": { "description": "Kod projektu danej wiki, używany zamiast: klucz projektu.", "aliases": [ "kp" ] }, "w języku wiki": { "description": "Jeśli nie pusta, to wyświetl nazwę projektu w jego języku.", "type": "string", "aliases": [ "jw" ] }, "bez znaczników": { "aliases": [ "bz" ], "description": "Szablon drukuje link bez otoczki linku wewnętrznego mechanizmu MediaWiki." }, "bez przetwarzania": { "aliases": [ "bp" ], "description": "Szablon drukuje link bez przetwarzania wewnętrznego linkowego." } }, "description": "Szablon jest używany do uzyskania nazwy serwisu danej wiki, ewentualnie w postaci linku do strony głównej projektu danej wiki lub do artykułu o danej wiki na Wikipedii, w jakieś podanej wersji językowej." } </templatedata> == Zobacz też == ; Szablony nazw * {{lk2|Szablony nazw}} - kategoria, z szablonami nazw, jako jego pozycje, zmiennych nielinkowych, otrzymywanych z pełnej nazwy strony. ; Szablony linków * {{s|Link wewnętrzny}} - szablon linków wewnętrznych, którego silnik jest wykorzystywany przy budowie tego szablonu, w kodzie w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategoria|Szablony nazw}} </includeonly> 2d88c22n15nh7ctfaxwvhdks9f6u0bk Szablon:OpisKsiążek/opis 10 56377 552399 506414 2026-08-18T23:41:49Z Persino 2851 /* Użycie */ 552399 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Ramka}} {{Wysokie ryzyko|częste użycie}} {{Wysokie ryzyko|skomplikowany}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon służy do podawania nazwy strony w przestrzeni nazw {{Np|(main)|link=tak}} i {{Np|Wikijunior|link=tak}} oraz w przestrzeni {{Np|Template|link=tak}} i {{Np|Module|link=tak}}, używając kolejno szablonów {{s|s}} i {{s|m}}, lub podając nazwę linku, który jest wyświetlany jak zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{s|Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane. == Opis parametrów == * {{Code|1}}, {{Code|2}}, {{Code|...}}, {{Code|n}} - parametry nazw pozycji (wymagane), * {{Code|_1}}, {{Code|_2}}, {{Code|...}}, {{Code|_n}} - parametry opisów pozycji o danych nazwach (opcjonalny), * {{Code|o1}}, {{Code|o2}}, {{Code|...}}, {{Code|on}} - nazwy wyświetlane linków, przez szablon, stron (opcjonalny), * {{Code|id}} - unikalny identyfikator ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|klasa}} - klasy reguł ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|styl}} - styl ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny). Oznaczenie {{Code|n}} w parametrach powyższych jest to największa liczba numerowanych parametrów. == Przykład == ; Przykład {{Pre|{{s|OpisKsiążek | 1 {{=}} ModPlug Tracker | _1 {{=}} Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 {{=}} AutoIt | _2 {{=}} Podręcznik programowania w języku skryptowym AutoIt. | 3 {{=}} Pisanie OS | _3 {{=}} Podręcznik wprowadzający w pisanie systemów operacyjnych.{{!}} o3 {{=}} Pisanie systemów operacyjnych | 4 {{=}} Szablon:ListaKategorii | _4 {{=}} Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 {{=}} Moduł:Mapa | _5 {{=}} Moduł do wyświetlania mapy w artykule. | 6 {{=}} Moduł:Mapa | _6 {{=}} Moduł do wyświetlania mapy w artykule. | o6 {{=}} Moduł Mapa | 7 {{=}} Szablon:Mapa | _7 {{=}} Szablon do wyświetlania nazwy mapy w artykule. | o7 {{=}} Szablon Mapa | 8 {{=}} Wikijunior:Polska | _8 {{=}} Podręcznik dla dzieci na temat Polski | 9 {{=}} Astronomiczne podstawy geografii/Okładka | _9 {{=}} Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }}}} ; Wynik {{OpisKsiążek | 1 = ModPlug Tracker | _1 = Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 = AutoIt | _2 = Podręcznik programowania w języku skryptowym AutoIt. | 3 = Pisanie OS | _3 = Podręcznik wprowadzający w pisanie systemów operacyjnych.| o3 = Pisanie systemów operacyjnych | 4 = Szablon:ListaKategorii | _4 = Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 = Moduł:Mapa | _5 = Moduł do wyświetlania mapy w artykule. | 6 = Moduł:Mapa | _6 = Moduł do wyświetlania mapy w artykule. | o6 = Moduł Mapa | 7 = Szablon:Mapa | _7 = Szablon do wyświetlania nazwy mapy w artykule. | o7 = Szablon Mapa | 8 = Wikijunior:Polska | _8 = Podręcznik dla dzieci na temat Polski | 9 = Astronomiczne podstawy geografii/Okładka | _9 = Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }} == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "2": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "3": { "description": "Strona pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "4": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "5": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "6": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "7": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "8": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "9": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "10": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "_1": { "description": "Opis pozycji o numerze 1.", "type": "string" }, "_2": { "description": "Opis pozycji o numerze 2.", "type": "string" }, "_3": { "description": "Opis pozycji o numerze 3.", "type": "string" }, "_4": { "description": "Opis pozycji o numerze 4.", "type": "string" }, "_5": { "description": "Opis pozycji o numerze 5.", "type": "string" }, "_6": { "description": "Opis pozycji o numerze 6.", "type": "string" }, "_7": { "description": "Opis pozycji o numerze 7.", "type": "string" }, "_8": { "description": "Opis pozycji o numerze 8.", "type": "string" }, "_9": { "description": "Opis pozycji o numerze 9.", "type": "string" }, "_10": { "description": "Opis pozycji o numerze 10.", "type": "string" }, "o1": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o2": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o3": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o4": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o5": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o6": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o7": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o8": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o9": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o10": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "styl": { "description": "Styl ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" }, "klasa": { "description": "Klasy reguł ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" } }, "description": "Szablon służy do podawania nazwy strony w przestrzeni nazw (główna) i Wikijunior oraz w przestrzeni Szablon i Moduł używając kolejno szablonów {{s}} i {{m}}, lub podając nazwę linku, który jest wyświetlany jak zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane." } </templatedata> == Zobacz też == * {{s|ListaKategorii}} - wyświetla listę stron, znajdującej się w podanej kategorii, występujące tam jako pozycje, tzn. podkategorie, zwykłe strony i pliki (obrazki). {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategorie | Szablony formułujące tabele | Szablony specjalne | Szablony przykładów podręcznikowe }} </includeonly> m5nhfzp51wjcm3jdvi63fky6cuiwgd3 552400 552399 2026-08-18T23:42:57Z Persino 2851 /* Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) */ 552400 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Ramka}} {{Wysokie ryzyko|częste użycie}} {{Wysokie ryzyko|skomplikowany}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon służy do podawania nazwy strony w przestrzeni nazw {{Np|(main)|link=tak}} i {{Np|Wikijunior|link=tak}} oraz w przestrzeni {{Np|Template|link=tak}} i {{Np|Module|link=tak}}, używając kolejno szablonów {{s|s}} i {{s|m}}, lub podając nazwę linku, który jest wyświetlany jak zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{s|Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane. == Opis parametrów == * {{Code|1}}, {{Code|2}}, {{Code|...}}, {{Code|n}} - parametry nazw pozycji (wymagane), * {{Code|_1}}, {{Code|_2}}, {{Code|...}}, {{Code|_n}} - parametry opisów pozycji o danych nazwach (opcjonalny), * {{Code|o1}}, {{Code|o2}}, {{Code|...}}, {{Code|on}} - nazwy wyświetlane linków, przez szablon, stron (opcjonalny), * {{Code|id}} - unikalny identyfikator ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|klasa}} - klasy reguł ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|styl}} - styl ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny). Oznaczenie {{Code|n}} w parametrach powyższych jest to największa liczba numerowanych parametrów. == Przykład == ; Przykład {{Pre|{{s|OpisKsiążek | 1 {{=}} ModPlug Tracker | _1 {{=}} Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 {{=}} AutoIt | _2 {{=}} Podręcznik programowania w języku skryptowym AutoIt. | 3 {{=}} Pisanie OS | _3 {{=}} Podręcznik wprowadzający w pisanie systemów operacyjnych.{{!}} o3 {{=}} Pisanie systemów operacyjnych | 4 {{=}} Szablon:ListaKategorii | _4 {{=}} Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 {{=}} Moduł:Mapa | _5 {{=}} Moduł do wyświetlania mapy w artykule. | 6 {{=}} Moduł:Mapa | _6 {{=}} Moduł do wyświetlania mapy w artykule. | o6 {{=}} Moduł Mapa | 7 {{=}} Szablon:Mapa | _7 {{=}} Szablon do wyświetlania nazwy mapy w artykule. | o7 {{=}} Szablon Mapa | 8 {{=}} Wikijunior:Polska | _8 {{=}} Podręcznik dla dzieci na temat Polski | 9 {{=}} Astronomiczne podstawy geografii/Okładka | _9 {{=}} Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }}}} ; Wynik {{OpisKsiążek | 1 = ModPlug Tracker | _1 = Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 = AutoIt | _2 = Podręcznik programowania w języku skryptowym AutoIt. | 3 = Pisanie OS | _3 = Podręcznik wprowadzający w pisanie systemów operacyjnych.| o3 = Pisanie systemów operacyjnych | 4 = Szablon:ListaKategorii | _4 = Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 = Moduł:Mapa | _5 = Moduł do wyświetlania mapy w artykule. | 6 = Moduł:Mapa | _6 = Moduł do wyświetlania mapy w artykule. | o6 = Moduł Mapa | 7 = Szablon:Mapa | _7 = Szablon do wyświetlania nazwy mapy w artykule. | o7 = Szablon Mapa | 8 = Wikijunior:Polska | _8 = Podręcznik dla dzieci na temat Polski | 9 = Astronomiczne podstawy geografii/Okładka | _9 = Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }} == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "2": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "3": { "description": "Strona pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "4": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "5": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "6": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "7": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "8": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "9": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "10": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "_1": { "description": "Opis pozycji o numerze 1.", "type": "string" }, "_2": { "description": "Opis pozycji o numerze 2.", "type": "string" }, "_3": { "description": "Opis pozycji o numerze 3.", "type": "string" }, "_4": { "description": "Opis pozycji o numerze 4.", "type": "string" }, "_5": { "description": "Opis pozycji o numerze 5.", "type": "string" }, "_6": { "description": "Opis pozycji o numerze 6.", "type": "string" }, "_7": { "description": "Opis pozycji o numerze 7.", "type": "string" }, "_8": { "description": "Opis pozycji o numerze 8.", "type": "string" }, "_9": { "description": "Opis pozycji o numerze 9.", "type": "string" }, "_10": { "description": "Opis pozycji o numerze 10.", "type": "string" }, "o1": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o2": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o3": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o4": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o5": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o6": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o7": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o8": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o9": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o10": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "styl": { "description": "Styl ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" }, "klasa": { "description": "Klasy reguł ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" } }, "description": "Szablon służy do podawania nazwy strony w przestrzeni nazw (główna) i Wikijunior oraz w przestrzeni Szablon i Moduł, używając kolejno szablonów {{s}} i {{m}}, lub podając nazwę linku, która jest wyświetlana jako zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane." } </templatedata> == Zobacz też == * {{s|ListaKategorii}} - wyświetla listę stron, znajdującej się w podanej kategorii, występujące tam jako pozycje, tzn. podkategorie, zwykłe strony i pliki (obrazki). {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategorie | Szablony formułujące tabele | Szablony specjalne | Szablony przykładów podręcznikowe }} </includeonly> df7svb3m5149y0m9cviaat2hbgeaoso 552401 552400 2026-08-18T23:43:42Z Persino 2851 /* Użycie */ 552401 wikitext text/x-wiki {{Podstrona dokumentacji}} {{Lua|Ramka}} {{Wysokie ryzyko|częste użycie}} {{Wysokie ryzyko|skomplikowany}} <!-- DODAWAJ KATEGORIE NA DOLE STRONY --> == Użycie == Szablon służy do podawania nazwy strony w przestrzeni nazw {{Np|(main)|link=tak}} i {{Np|Wikijunior|link=tak}} oraz w przestrzeni {{Np|Template|link=tak}} i {{Np|Module|link=tak}}, używając kolejno szablonów {{s|s}} i {{s|m}}, lub podając nazwę linku, która jest wyświetlana jako zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{s|Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane. == Opis parametrów == * {{Code|1}}, {{Code|2}}, {{Code|...}}, {{Code|n}} - parametry nazw pozycji (wymagane), * {{Code|_1}}, {{Code|_2}}, {{Code|...}}, {{Code|_n}} - parametry opisów pozycji o danych nazwach (opcjonalny), * {{Code|o1}}, {{Code|o2}}, {{Code|...}}, {{Code|on}} - nazwy wyświetlane linków, przez szablon, stron (opcjonalny), * {{Code|id}} - unikalny identyfikator ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|klasa}} - klasy reguł ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny), * {{Code|styl}} - styl ramki {{Tag|div}}, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami (opcjonalny). Oznaczenie {{Code|n}} w parametrach powyższych jest to największa liczba numerowanych parametrów. == Przykład == ; Przykład {{Pre|{{s|OpisKsiążek | 1 {{=}} ModPlug Tracker | _1 {{=}} Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 {{=}} AutoIt | _2 {{=}} Podręcznik programowania w języku skryptowym AutoIt. | 3 {{=}} Pisanie OS | _3 {{=}} Podręcznik wprowadzający w pisanie systemów operacyjnych.{{!}} o3 {{=}} Pisanie systemów operacyjnych | 4 {{=}} Szablon:ListaKategorii | _4 {{=}} Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 {{=}} Moduł:Mapa | _5 {{=}} Moduł do wyświetlania mapy w artykule. | 6 {{=}} Moduł:Mapa | _6 {{=}} Moduł do wyświetlania mapy w artykule. | o6 {{=}} Moduł Mapa | 7 {{=}} Szablon:Mapa | _7 {{=}} Szablon do wyświetlania nazwy mapy w artykule. | o7 {{=}} Szablon Mapa | 8 {{=}} Wikijunior:Polska | _8 {{=}} Podręcznik dla dzieci na temat Polski | 9 {{=}} Astronomiczne podstawy geografii/Okładka | _9 {{=}} Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }}}} ; Wynik {{OpisKsiążek | 1 = ModPlug Tracker | _1 = Podręcznik opisuje korzystanie z programu ModPlug Tracker - prostego narzędzia do tworzenia muzyki. | 2 = AutoIt | _2 = Podręcznik programowania w języku skryptowym AutoIt. | 3 = Pisanie OS | _3 = Podręcznik wprowadzający w pisanie systemów operacyjnych.| o3 = Pisanie systemów operacyjnych | 4 = Szablon:ListaKategorii | _4 = Szablon do wyświetlania listy kategorii, danej kategorii, jako pozycje. | 5 = Moduł:Mapa | _5 = Moduł do wyświetlania mapy w artykule. | 6 = Moduł:Mapa | _6 = Moduł do wyświetlania mapy w artykule. | o6 = Moduł Mapa | 7 = Szablon:Mapa | _7 = Szablon do wyświetlania nazwy mapy w artykule. | o7 = Szablon Mapa | 8 = Wikijunior:Polska | _8 = Podręcznik dla dzieci na temat Polski | 9 = Astronomiczne podstawy geografii/Okładka | _9 = Jest to skrypt z astronomicznych podstaw geografii, który daje przegląd wybranych zagadnień tej tematyki. }} == Błędy == Błędy należy zgłaszać na stronie {{kwestie techniczne}}. == Parametry szablonu ({{Strukturyzacja Wizualnego Edytora}}) == <templatedata> { "params": { "1": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "2": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "3": { "description": "Strona pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "4": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "5": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "6": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "7": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "8": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "9": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "10": { "description": "Strona do pozycji (podręcznika lub strony).", "type": "wiki-page-name" }, "_1": { "description": "Opis pozycji o numerze 1.", "type": "string" }, "_2": { "description": "Opis pozycji o numerze 2.", "type": "string" }, "_3": { "description": "Opis pozycji o numerze 3.", "type": "string" }, "_4": { "description": "Opis pozycji o numerze 4.", "type": "string" }, "_5": { "description": "Opis pozycji o numerze 5.", "type": "string" }, "_6": { "description": "Opis pozycji o numerze 6.", "type": "string" }, "_7": { "description": "Opis pozycji o numerze 7.", "type": "string" }, "_8": { "description": "Opis pozycji o numerze 8.", "type": "string" }, "_9": { "description": "Opis pozycji o numerze 9.", "type": "string" }, "_10": { "description": "Opis pozycji o numerze 10.", "type": "string" }, "o1": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o2": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o3": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o4": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o5": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o6": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o7": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o8": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o9": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "o10": { "description": "Nazwa wyświetlana strony, ale nie szablonu, czy modułu.", "type": "string" }, "styl": { "description": "Styl ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" }, "klasa": { "description": "Klasy reguł ramki <div>...</div>, w której wewnątrz znajduje się tabela listy pozycji wraz z opisami.", "type": "string" } }, "description": "Szablon służy do podawania nazwy strony w przestrzeni nazw (główna) i Wikijunior oraz w przestrzeni Szablon i Moduł, używając kolejno szablonów {{s}} i {{m}}, lub podając nazwę linku, która jest wyświetlana jako zwykły link (nie jak szablon lub moduł - bez użycia tych szablonów) przy użyciu szablonu {{Link wewnętrzny}}, wraz z ich opisami. Można też podać alternatywną wyświetlaną nazwę strony. Pozycje tych stron są numerowane." } </templatedata> == Zobacz też == * {{s|ListaKategorii}} - wyświetla listę stron, znajdującej się w podanej kategorii, występujące tam jako pozycje, tzn. podkategorie, zwykłe strony i pliki (obrazki). {{BrClear}} <includeonly><!-- ++++ DODAWAJ KATEGORIE PONIŻEJ TEJ LINII --> {{Kategorie | Szablony formułujące tabele | Szablony specjalne | Szablony przykładów podręcznikowe }} </includeonly> m07qb7bhc59lmz9kdqnt6hjwrf3t24x Moduł:StronicowyParser/AnalizaSpisuRzeczy 828 60192 552414 551811 2026-08-19T06:31:05Z Persino 2851 552414 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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_inne_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_inne_wprowadzenia_napisu_spisu_rzeczy; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,2); end; end; else local liczba_szablon_napisowu_wprowadzenia_tekstu=szablony_inne_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_napisowu_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_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; 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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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,2); 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; 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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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; 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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 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_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return nil;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return nil;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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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,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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; i5n96nd2bhf4lc8fuq6unqcg3197zef 552415 552414 2026-08-19T06:56:45Z Persino 2851 552415 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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_inne_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_inne_wprowadzenia_napisu_spisu_rzeczy; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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_wprowadzenia_tekstu=szablony_inne_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_napisowu_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_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; 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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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; 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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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; 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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 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_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return nil;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return nil;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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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,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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; fk01y343w7ezyz70qi29yr7a0b8mxzj 552417 552415 2026-08-19T07:53:28Z Persino 2851 552417 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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_inne_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_inne_wprowadzenia_napisu_spisu_rzeczy; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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_wprowadzenia_tekstu=szablony_inne_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_napisowu_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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 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_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return nil;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return nil;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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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,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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; 4mmgp9gjyoqs3yhnv8x7eki0mzsqpcp 552419 552417 2026-08-19T08:44:13Z Persino 2851 552419 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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_inne_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_inne_wprowadzenia_napisu_spisu_rzeczy; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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_wprowadzenia_tekstu=szablony_inne_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_napisowu_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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 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_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return nil;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return nil;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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; nkensw51344az2xqt8n3q297enz00uv 552420 552419 2026-08-19T09:30:46Z Persino 2851 552420 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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 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_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return nil;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return nil;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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; fg1t23pn5df5ejdnu10z4wluvwt6f9o 552423 552420 2026-08-19T10:00:49Z Persino 2851 552423 Scribunto text/plain local p={}; 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 rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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,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_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,nil,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,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,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.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then 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_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_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_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_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_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.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<=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.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,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,"",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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_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,__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=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); 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_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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, 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,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_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, 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 Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) 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_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 Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,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,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.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.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; 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 --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_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.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(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_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_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_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_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_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_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_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_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_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_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_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_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_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.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local czy_poczt; if(not liczba_start_tekst)then liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"^([^%*#:;<>\n][^\n]*)\n",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); czy_poczt=true; else czy_poczt=false; end; 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+#linia+(czy_poczt and 1 or 2); 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; 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); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); 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_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; else liczba_start=liczba_koniec_tekst; 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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%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 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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else 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=mw.ustring.match(dalszy_tekst,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_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==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; 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_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; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(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(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; 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_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.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); 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_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; 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,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_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_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) 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]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() 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; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); 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_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 start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,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 --koniec_obiekt=koniec_szablon; 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=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; 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,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_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; bk7usuwkpn7os1k8vqfs48cnyijechj Wikipedysta:Persino/brudnopis10 2 62835 552416 531307 2026-08-19T07:08:05Z Persino 2851 552416 wikitext text/x-wiki {{CentrujStart2}} {{ce|Szkice artystyczne|w=40px|po=10px}} {{ce|''Władysława Tarnowskiego''|w=28px|po=30px}} {{ce|z komentarzem|w=18px|po=15px}} {{ce|Marcina Tarnowskiego|w=18px|po=60px}} {{---}} <br><br> {{ce|''SPIS RZECZY''|w=120%|po=30px}} {{---}} <br><br> {{SpisZw||[[/Monografia łzy|Monografia łzy]]|1}} {{SpisZw||[[/Monografia uśmiechu|Monografia uśmiechu]]|2}} {{SpisZw||[[/Monografia pocałunku|Monografia pocałunku]]|3}} {{SpisZw||[[/Cena|Cena]]|4}} {{CentrujKoniec2}} {{PobierzNumerArtykułu|Monografia łzy|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis10}} 41oo8sdqedakbb1iodbjklo6z577q0q Wikibooks:Moduły/StronicowyParser/NumerLubNazwaArtykułówKsiążek 4 63515 552412 552195 2026-08-19T05:49:44Z Persino 2851 /* {{Śródtytuł|p.PobierzNumerLubNazweArtykulu}}{{Code|p.PobierzNumerLubNazweArtykulu}} */ 552412 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/NumerLubNazwaArtykułówKsiążek}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Funkcje pobierania numerku artykułu lub nagłówka o którymś numerze jego nazwy przy pomocy szablonu: {{s|PobierzNumerArtykułu}}, lub odwrotnie jej nazwy, dzięki: {{s|PobierzNazwęArtykułu}}. Można też zbierać informacje przy pomocy wywołania ramki: {{m|StronicowyParser|PobierzDaneKsiążki}}. == {{Śródtytuł|funkcje lokalne}}Funkcje lokalne, numerków i nazw, potrzebne i pomocne == Funkcje lokalne potrzebne do użycia w funkcjach użytych w rozdziale: {{LinkŚródtytuł|StronicowyParser/NumerLubNazwaArtykułówKsiążek}}, są zdefiniowane kolejno w modułach. Są to funkcje lokalne dla funkcji liczenia, numerków lub nazw, na podstawie tego przeciwnego, oraz do wyznaczania bazy, numerków i nazw, z innymi parametrami rozdziałów i artykułów. === {{Code|{{ld2|StronicowyParser/NumerLubNazwaArtykułówKsiążek/Potrzebne}}}} (potrzebne) === Są to funkcje potrzebne, czyli konieczne, do budowy funkcji do liczenia nazw i numerków. ==== {{Śródtytuł|p.PobierzNumerLubNazweArtykulu}}{{Code|p.PobierzNumerLubNazweArtykulu}} ==== Funkcja do pobierania nazwy lub numerka rozdziału lub artykułu jego przeciwnego, przy pomocy funkcji, realizowana przy pomocy funkcji: {{LinkPatrz|__FUNKCJA}}, ale też za pomocą tej funkcji można zbierać informacje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.PobierzNumerLubNazweArtykulu=function(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,typ,zbieraj_dane_wszystkie)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} {{Patrz|frame}} - tablica ramki tablicy transportu funkcji, * {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}} - tablica używana zamiast uzyskania tablicy ramki: {{Code|{{ld2|StronicowyParser/informacje}}}}, a właściwie jego głównej podtablicy, * {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja do uzyskania tego, co jest potrzebne w nagłówku, ale też ona służy do zbierania informacji, * {{Code|typ}} {{Patrz|typ}} - prawdziwe, gdy jest uzyskiwana nazwa artykułu na podstawie jego numeru, przeciwnie, wtedy odwrotnie, * {{Code|zbieraj_dane_wszystkie}} {{Patrz|zbieraj_dane_wszystkie}} - prawdziwe, gdy funkcja służy do zbierania informacji. Parametry tablica ramki {{LinkPatrz|frame}} tablicy transportu funkcji: * {{Code|nagłówek}} {{Patrz|nagłówek}} - prawdziwe, gdy artykuły mogą się powtarzać, * {{Code|nie wszystkie}} {{Patrz|nie wszystkie}} - prawdziwe, wtedy nie są brane wszystkie rozdziały, * {{Code|dane}} {{Patrz|dane}} - typ zbieranych lub uzyskiwanych danych, * {{Code|spis}} {{Patrz|spis}} - nazwa artykułu spisu, a więc który spis ma rozważać, * {{Code|poziomowo}} {{Patrz|poziomowo}} - czy ma brać numerki wielopoziomowe, czyli oddzielonych kropkami, * {{Code|nazwa}} {{Patrz|nazwa-p.PobierzNumerLubNazweArtykulu}} - brana jest nazwa linku artykułu zamiast nazwy, * {{Code|który}} {{Patrz|który}} - którą nazwę nagłówka lub artykułu, albo jego numer, w zależności od ustawień, ma wyszukać, aby np. zwrócić to przeciwne. Powyższe parametry to są parametry ramki rodzica, czyli szablonu. Przykłady funkcji: {{LinkPatrz|__FUNKCJA}}, są kolejno w punktach: {{LinkŚródtytuł|__FUNKCJA-PobierzNumerArtykułu}} dla funkcji: {{LinkŚródtytuł|p["PobierzNumerArtykułu"]}}, {{LinkŚródtytuł|__FUNKCJA-PobierzNazwęArtykułu}} dla funkcji: {{LinkŚródtytuł|p["PobierzNazwęArtykułu"]}}, i {{LinkŚródtytuł|__FUNKCJA-PobierzDaneKsiążki}} dla funkcji: {{LinkŚródtytuł|p["PobierzDaneKsiążki"]}}. Funkcja numeruje poszczególne nagłówki lub artykuły i na podstawie funkcji: {{LinkPatrz|__FUNKCJA}}, coś uzyskuje. ; Są różne typy zbierania danych, one charakteryzują się parametrem {{LinkPatrz|dane}}, ten parametr uzyskuje różne liczby, a one są {{Code|1}}, {{Code|2}} lub {{Code|3}}, a one oznaczają{{dk}} * {{Code|1}} - rozważa tylko artykuły, * {{Code|2}} - rozważa tylko rozdziały, * {{Code|3}} - rozważa nie tylko artykuły, również rozdziały. Brak tej danej lub inna wartość oznacza, że brana jest jego domyślna wartość: {{Code|dana}} {{Code|{{=}}}} {{Code|1}}. Funcja bierze pod uwagę rozdziały dodatnie równaniowo, centrowane szablonowo lub znacznikowo, a nawet nagłówki, które też są nimi, ale również średnikowe, czy zerowe, a nawet ujemne. ; Kolejność ważności rozdziałów{{dk}} * Rozdziały centrowane szablonowo ({{s|Ce}}, {{s|Centruj}} i {{s|Center}}) bądź znaczniowo ({{Tag|center}}), * Rozdziały dodatnie równaniowo (jak: {{Code|<nowiki>== Nagłówek ==</nowiki>}}) i nagłówki ({{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}), a także nagłówki generowane przez szablon {{s|HNumer}} (ten szablon przy tym zachowuje zgodność z rozdziałami dodatnimi równaniowo, ale nie do końca), * Rozdziały średnikowe (zaczynające się od znaku {{Code|<nowiki>;</nowiki>}}), * Rozdziały zerowe (niezaczynające się od żadnego specjalnego znaku), * Rozdziały ujemne - to są pozycje list zaczynających się od {{Code|<nowiki>[%*:#]</nowiki>}}, ** Ważność rozdziałów ujemnych jest w kolejności od znaku zaczynającego listę: {{Code|<nowiki>*</nowiki>}}, {{Code|<nowiki>#</nowiki>}} i {{Code|<nowiki>:</nowiki>}} (bo czasami dwukropek nie jest numerowany, jeżeli jest pochyły, lub zawiera za dużo znaków). Funkcja przy pomocy zmiennej {{LinkPatrz|nagłówek}}, zbiera, nawet powtarzające się, artykuły, nawet gdyby były one z nagłówkami. Można również rozważyć, jakie rozdziały ma zbierać, w spisach w rozdziale '''Spis treści''' i '''SPIS RZECZY''', są zbierane wszystkie rozdziały, w innych miejscach rozdziały moga nie być wszystkie zbierane, a jeżeli tak jest, to parametr {{LinkPatrz|nie wszystkie}} ma wartość niepustą. ; Typy rozdziałów spisowych i sposób numerowania{{dk}} * Rozdziały, według funkcji, w rozdziałe głównym danego spisu i o nazwie: '''Spis treści''' i '''SPIS RZECZY''', są liczone względem tych poszczególnych kolejno rozdziałach, ale od początku, a po wyściu z tego drugiego odtwarzane jego numer spisu treści, i na podstawie tak uzyskanego numeru tego liczy on dalej. * Dla innych rozdziałów w wielu spisach (jeżeli podręcznik jest wielospisowy, tzn. ma wiele spisów treści), a nie tylko jedynym, do numeru rozdziału i artykułów (tymi rozdziałami są: dodatnie, czy ujemne, a nawet średnikowe badź zerowe), są wykorzystywane numery innych poprzedzających, czy nawet następujących czasami, tych elementów spisowych. Można zbierać dane, jeśli {{LinkPatrz|poziomowo}} jest prawdziwa, wtedy numerki są wielopoziomowe, tzn. ewentualnie rozdzielone numerkami, przeciwna wartość determiniuje, że nagłówki lub artykuły, w zależności od ustawień zbierania danych w spisach książki, są numerowane tylko liczbami naturalnymi od {{Code|1}}. Wartość {{LinkPatrz|nazwa-p.PobierzNumerLubNazweArtykulu}}, to zamiast nazwy artykułu brana jest jej nazwa linku, podczas pobierana nazwy. Parametr {{LinkPatrz|który}} jest liczbą lub domyślną wartością {{Code|1}}, to oznacza, że brana jest wartość nazwy artykułu na podstawie numerka jej ten numer okreslony tą zmienną, lub jeśli pobierany jest numer to ten numer nazwy. A co oznacza '''ten numer''', właśnie to, że brana jest ta zmienna, która jest taka sama o tym numerze. Czasami, jeśli w rozdziale jest wiele artykułów, to ten artykuł jest traktowany jako rozdzial, i w nim artykuły są liczone osobno w odpowiedni sposób. Czasami znaki przed artykułem podowują, że taki rozdział jest liczony jako rozdział, a z artykułami jest jak poprzednio, a gdy w artykuł jest na poczatku pozycji spisu, to to wtedy jest to zwykły artykuł. === {{Code|{{ld2|StronicowyParser/NumerLubNazwaArtykułówKsiążek/Pomocne}}}} (pomocne) === Są to funkcje potrzebne, czyli dostateczne, do budowy funkcji do liczenia nazw i numerków. ==== {{Śródtytuł|p.ZamienNumerArtykuluNaTabele}}{{Code|p.ZamienNumerArtykuluNaTabele}} ==== Funkcja zamienia numerki z kropkami na tabelę, z nich. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamienNumerArtykuluNaTabele=function(numer_artykulu)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_artykulu}} {{Patrz|numer_artykulu}} - numer artykułu lub nagłówka, którego numerki są oddzielone kropkami. Funkcja zwraca tę tablicę numerków rozpakujący: {{LinkPatrz|numer_artykulu}}, z niego numerki, który każdy element numerowany tej tablicy, to są te elementy oddzielone kropkami w tym numerze artykułu. ==== {{Śródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}{{Code|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}} ==== Funkcja w odpowiedni w sposób usuwa pierwsze jedynki w numerach, które mogą na początku się powtarzać. Tylko te jedynki są usuwane,aby nie wyzerować tablicy numerków. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci=function(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - jak w: {{LinkPatrz|frame}}, * {{Code|tabela_listy_danych_analizy_ksiazki}} - jak w: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, * {{Code|tab_lista_artykulow_w_ksiazce}} {{Patrz|tab_lista_artykulow_w_ksiazce}} - tablica spisów książki, jego rozdziałów i artykułów, * {{Code|tab_numer_artykulu}} {{Patrz|tab_numer_artykulu}} - tabela numerków nagłówków lub artykułów. Funkcja generuje na podstawie {{LinkPatrz|tab_lista_artykulow_w_ksiazce}} tabelę listy spisów, które należą też do tych spisów. Na podstawie tej tabeli, jeżeli jakis inny spis, niż główny, nie należy do tej tabeli, to funkcja zwraca tabelę numerków {{LinkPatrz|tab_numer_artykulu}}. Funkcja dla długości tablicy większej niż jeden, jeżeli ten numerek jest {{Code|1}}, to jest on usuwamy. A jeżeli dalszy numerek jest też {{Code|1}}, wtedy jeżeli jest jakiś główny jego rozdział, to wtedy jest usuwana początkowa jedynka. Funkcja zwraca przetworzoną niepustą tablicę {{LinkPatrz|tab_numer_artykulu}}. ==== {{Śródtytuł|p.IntegrowanieNumeracjiArtykuluZWyliczaniemSpisuTresci}}{{Code|p.IntegrowanieNumeracjiArtykuluZWyliczaniemSpisuTresci}} ==== Funkcja łączy numerację spisu z numeracją artykułu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.IntegrowanieNumeracjiArtykuluZWyliczaniemSpisuTresci=function(numer_artykulu,numer_spisu)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_artykulu}} - jak w: {{LinkPatrz|numer_artykulu}}, czyli numerki oddzielone kropkami artykułu, * {{Code|numer_spisu}} {{Patrz|numer_spisu}} - numerki oddzielone kropkami spisu. Funkcja zamienia na tablicę numerków przy pomocy funkcji {{LinkŚródtytuł|p.ZamienNumerArtykuluNaTabele}} numerki artykułu {{LinkPatrz|numer_artykulu}}, a jeśli tablica numerków artykułu jest mniejszy niż jeden, wtedy zwraca tą pustą tablicę numerków. A pózniej ta zamiana na tablicę w ten sam sposób odbywa się dla {{LinkPatrz|numer_spisu}}. Funkcja dla początkowego numerku w tablicy {{LinkPatrz|numer_artykulu}}, zamienia na końcowy numerek spisu {{LinkPatrz|numer_spisu}}. Dalsze numerki ze spisu są dodawane kolejno do numerek artykułów na samym początku tablicy. Funkcja zwraca numerek całkowity artykułu w postaci połączonej z dwóch numerków spisu i artykułu. ==== {{Śródtytuł|p.WarunekSpisuWoluminu}}{{Code|p.WarunekSpisuWoluminu}} ==== Funkcja do sprawdzania w funkcjach tablicy transportu: {{LinkŚródtytuł|p["PobierzNumerArtykułu"]}} i {{LinkŚródtytuł|p["PobierzNazwęArtykułu"]}}, czy numer całkowity artykuły, czy rozdziału, powstałym po połączeniu ze sobą numeru rozdziału i numeru artykułu, którą trzebaa bezpośrednio zrzucić, bez przetwarzania, przez te funkcje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WarunekSpisuWoluminu=function(nazwa_spisu,numer_spisu,tab_numer,tab_poziomowo)...end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_spisu}} - jak w: {{LinkPatrz|nazwa_spisu}}, * {{Code|numer_spisu}} - jak w: {{LinkPatrz|numer_spisu}}, * {{Code|tab_numer}} - jak w: {{LinkPatrz|tab_numer}}, * {{Code|tab_poziomowo}} - jak w: {{LinkPatrz|tab_poziomowo}}. == {{Śródtytuł|StronicowyParser/NumerLubNazwaArtykułówKsiążek}}{{Code|{{ld2|StronicowyParser/NumerLubNazwaArtykułówKsiążek}}}} == To są funkcje zwracane do tablicy transportu, i mogą być one widoczne ze strony innych modułów. Te funkcje wykorzystują funkcje z rozdziału: {{Code|{{LinkŚródtytuł|funkcje lokalne}}}}. === {{Śródtytuł|p["PobierzNumerArtykułu"]}}{{Code|p["PobierzNumerArtykułu"]}} === Funkcja pobierania numeru artykułu, wedle ustawień, na podstawie jej nazwy. Funkcja jest implemetowana w szablonie: {{s|PobierzNumerArtykułu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p["PobierzNumerArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - jak w: {{LinkPatrz|frame}}, * {{Code|tabela_listy_danych_analizy_ksiazki}} - jak w: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}. ==== {{Śródtytuł|__FUNKCJA-PobierzNumerArtykułu}}{{Code|__FUNKCJA}} ==== Jest to funkcja, dzięki, której można zamienić nazwę nagłówka, czy artykułu, na numer, będący liczbą naturalną od {{Code|1}}, lub numerkami oddzielonych kropkami, w zależności od ustawień. Definicja skrótowa funkcji {{ZobaczTeż|__FUNKCJA-PobierzNumerArtykułu}}: <syntaxhighlight lang="lua"> local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_lub_rozdzial_ksiazki)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-PobierzNumerArtykułu}}: * {{Code|poziomowo}} - jak w: {{LinkPatrz|poziomowo}}, czyli czy dopasowanie ma być wielopoziomowe, oddzielone kropkami, czy liczba naturalną, * {{Code|i}} {{Patrz|i}} - gdy {{LinkPatrz|poziomowo}}, jest fałszywe, to który numer jest danego rozdziału lub artykułu, jest to liczba naturalna, * {{Code|ktory}} - jak w: {{LinkPatrz|który}}, czyli które takie samo dopasowanie ma uwzględnić, * {{Code|pierwszy_parametr_szablonu}} {{Patrz|pierwszy_parametr_szablonu}} - jest to bezparametrowa funkcja zwracająca tabelę z trzech parametrów, w którym elementami są kolejno: pierwszy jest to pierwszy parametr szablonu, który uruchamia funkcję, która z kolei iteracyjnie wywołuje tą funkcję, ono przyjmuje taką formę w zależności od parametru {{LinkPatrz|typ}}, drugi, czy zamiast artykułu ma zwracać nazwę linku, a trzeci to jest parametr {{LinkPatrz|dane}}, * {{Code|rozdzial}} {{Patrz|rozdzial}} - rozdział w spisie, * {{Code|artykul}} {{Patrz|artykul}} - nazwa artykułu, w spisie, w książce lub innej strony, * {{Code|tab_numer}} {{Patrz|tab_numer}} - tablica numerków charakteryzujący po połączeniu łacznikiem kropką jest to numer rozdziału, * {{Code|tab_poziomowo}} {{Patrz|tab_poziomowo}} - tablica numerków charakteryzujący po połączeniu łacznikiem kropką jest to numer artykułu w rozdziale, * {{Code|czy_nienilowy_rozdzial}} {{Patrz|czy_nienilowy_rozdzial}} - czy rozważany rozdział jest nienilowy, * {{Code|czy_artykuly_podrecznikowe}} {{Patrz|czy_artykuly_podrecznikowe}} - czy artykuł jest stroną podręcznika, * {{Code|przekierowanie}} {{Patrz|przekierowanie}} - nazwa artykułu przekierowania, * {{Code|nazwa}} {{Patrz|nazwa}} - nazwa linku artykułu, * {{Code|artykul_spisu}} {{Patrz|artykul_spisu}} - nazwa artykułu spisu, podany w parametrach szablonu, która uruchamia funkcję, która z kolei wywołuje tą funkcję, * {{Code|nazwa_spisu}} {{Patrz|nazwa_spisu}} - nazwa artykułu spisu wśród wszystkich spisach, * {{Code|numer_spisu}} - jak w: {{LinkPatrz|numer_spisu}} - jest to numer spisu, jest to liczba naturalna, * {{Code|tab_lista_artykulow_w_ksiazce}} - jak w: {{LinkPatrz|tab_lista_artykulow_w_ksiazce}}, * {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{Patrz|glowny_spis_tresci_lub_rozdzial_ksiazki}} - czy artykuł znajduje się w głównym spisie treści. Gdy {{Code|artykul}} {{LinkPatrz|artykul}} przyjmuje wartość pustą, wtedy jest sprawdzany rozdział, jeśli {{Code|dane}} {{LinkPatrz|dane}} jest równy liczbowo {{Code|2}} lub {{Code|3}}, w takim razie jest sprawdzany rozdział {{LinkPatrz|rozdzial}} ze zmienną podaną jako pierwszy parametr podanego szablonu, a jeśli to {{LinkPatrz|artykul}} przyjmuje inną wartość, wtedy dla {{LinkPatrz|dane}} równe {{Code|1}} lub {{Code|3}}, wtedy jest z tym pierwszym parametrem sprawdzany {{LinkPatrz|artykul}}, a jeżeli w tym przypadku dopasowanie się nie powiedzie, wtedy tak samo jest sprawdzane jego przekierowanie {{LinkPatrz|przekierowanie}}. Jeśli poprzednie dopasowanie się powiedzie, wtedy jest sprawdzane, czy to takie samo dopsasowanie jest {{LinkPatrz|który}}, a ten licznik tych samych dopasowań jest bez przerwy liczony, gdy {{Code|poziomowo}} {{LinkPatrz|poziomowo}} przyjmuje wartość fałszywą, wtedy zwracane są dwa parametry, tzn. kolejno: {{Code|i}} {{LinkPatrz|i}} i {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, przeciwnie, wtedy, dalej będziemy rozważać, numerki rozdziału i artykułu można przedstawić w postaci tabel numerków, które mozna płączyć w każdnym z nich kropkami, a je kolejno kropkami. Po takim połączeniu otrzymamy numerem artykułu {{Patrz|numer_artykułu}} w danej książce, numery artykułu mogą się powtarzać rozdziałów lub artykułów. Gdy {{ZobaczTeż|Parametry bez przetwarzania}} jest jeden spis, którym jest strona główna książki, albo nie istnieje {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}} nie istnieje i jeśli fukcja: {{LinkŚródtytuł|p.WarunekSpisuWoluminu}}, zwróciła prawdę, lub: {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, i {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki_poprz}} {{Patrz|glowny_spis_tresci_lub_rozdzial_ksiazki_poprz}} (poprzednie {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}), są prawdę, i numer spisu {{LinkPatrz|numer_spisu}} istnieje, i jest większy od zera, wtedy jest zwracane {{ZobaczTeż|numer_artykułu}} numer artykułu {{LinkPatrz|numer_artykułu}}, jako pierwsza zwracana wartość, a druga {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}. W innym przypadku, gdy spis jest pierwszy, i jest główny spis treści według {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, to podobnie robimy jak w punkcie {{LinkZobaczTeż|numer_artykułu}}, przeciwnie: numer artykułu {{LinkPatrz|numer_artykułu}} jest zamieniany na tabelę dzięki {{LinkŚródtytuł|p.ZamienNumerArtykuluNaTabele}}, i z niego są usuwane początkowe jedynki przy pomocy {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, dalej robimy tak jak: {{ZobaczTeż|parametry zwracane łącznikowe}} uzyskana tabela jest łączona w łańcuch znakowych z łącznikiem kropką, używając funkcji: {{LzLua|table.concat}}, a drugim parametrem zwracanym jest {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}. A gdy jeszcze nie zwrócono wyniku, wtedy liczony jest numer spisu treści na podstawie: {{LinkŚródtytuł|p.PobierzNumerLubNazweArtykulu}}, jeśli on nie istnieje, wtedy jest zwracany numer artykułu {{LinkPatrz|numer_artykułu}} jak w: {{LinkZobaczTeż|numer_artykułu}}, przeciwnie mamy, w którym jest dany artykuł, który po połączeniu z numerem artykułu daje całkowity numer artykułu, a ta integracja następuje dzięki {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, co póżniej jest zwracane jak w: {{LinkZobaczTeż|parametry zwracane łącznikowe}}. ==== Dalsza część funkcji ==== Wywoływana jest tutaj funkcja: {{LinkŚródtytuł|__FUNKCJA-PobierzNumerArtykułu}}, która zwraca dwie dane, tzn. numer rozdziału lub artykułu. Drugą wartością zwracaną jest, czy to znajduje się, co to pierwsze opisuje w rozdziale głównym. Główna definicja funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul=require("Module:StronicowyParser/NumerLubNazwaArtykułówKsiążek/Potrzebne"); local wartosc,glowny_spis_tresci_lub_rozdzial_ksiazki=stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul.PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false); return wartosc,glowny_spis_tresci_lub_rozdzial_ksiazki; </syntaxhighlight> === {{Śródtytuł|p["PobierzNazwęArtykułu"]}}{{Code|p["PobierzNazwęArtykułu"]}} === Funkcja pobierania nazwy artykułu na podstawie jej numeru, wedle ustawień. Funkcja jest implemetowana w szablonie: {{s|PobierzNazwęArtykułu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p["PobierzNazwęArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - jak w: {{LinkPatrz|frame}}, * {{Code|tabela_listy_danych_analizy_ksiazki}} - jak w: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}. ==== {{Śródtytuł|__FUNKCJA-PobierzNazwęArtykułu}}{{Code|__FUNKCJA}} ==== Jest to funkcja, dzięki, której można zamienić numer nagłówka, czy artykułu, na nazwę, ten numer będący liczbą naturalną od {{Code|1}}, lub numerkami oddzielonych kropkami, w zależności od ustawień. Definicja skrótowa funkcji ma ten sam kształt, co w: {{LinkZobaczTeż|__FUNKCJA-PobierzNumerArtykułu}}, a opis parametrów jest według: {{LinkZobaczTeż|Parametry-PobierzNumerArtykułu}}. Gdy {{Code|poziomowo}} {{LinkPatrz|poziomowo}} jest welkością fałszywą, i gdy {{Code|i}} {{LinkPatrz|i}} jest równe {{Code|numer}} {{Patrz|numer}}, który jest pierwszym parametrem, wtedy dla {{Code|ktory}} {{LinkPatrz|który}}, dla jakiegoś tego samego powtórzenia, gdy {{Code|artykul}} {{LinkPatrz|artykul}} jest nie równy ciągowi pustemu, wtedy jest wyświetlany artykuł {{LinkPatrz|artykul}}, jeśli {{Code|nazwa}} (parametr ramki {{LinkŚródtytuł|p.PobierzNumerLubNazweArtykulu}}) {{LinkPatrz|nazwa-p.PobierzNumerLubNazweArtykulu}} jest niepuste, przeciwnie jest wyświetlana nazwa linku artykułu, a dla {{LinkPatrz|artykul}} pustego, wtedy jest wyświetlany rozdział {{LinkPatrz|rozdzial}}. ===== {{Śródtytuł|NumerArtykulu}}{{Code|NumerArtykulu}} ===== Zmienna {{Code|tab_numer}} {{LinkPatrz|tab_numer}} jest łączona kropkami przy pomocy {{LzLua|table.concat}}, a dalej {{Code|tab_poziomowo}} {{LinkPatrz|tab_poziomowo}}, łączymy takim samym łącznikiem, co poprzednio, a oba łańcuchy też łączymy w jeden większy łańcuch znakowy, którym jest numer artykułu. ===== {{Śródtytuł|WynikArtykulowyZNumeru}}{{Code|WynikArtykulowyZNumeru}} ===== Funkcja do liczenia artykułu lub nazwy artykułu albo rozdziału z jego numeru wuelopoziomowo, tzn. przy prawdziwości parametru {{LinkPatrz|poziomowo}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WynikArtykulowyZNumeru(numer_artykulu)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_artykulu}} - jak w: {{LinkPatrz|numer_artykulu}}. Gdy {{LinkPatrz|artykul}} jest równy ciągowi pustemu, wtedy dla parametru {{LinkPatrz|dane}}, takiego, że {{Code|2}} lub {{Code|3}}, sprawdzamy, czy numer artykułu {{LinkPatrz|numer_artykulu}} jest równy {{Code|numer}} {{LinkPatrz|numer}}, a jeśli nie, to dla parametrów {{LinkPatrz|dane}}, takiego, że {{Code|1}} lub {{Code|3}}, ale dla artykułu {{LinkPatrz|artykul}} równym ciągowi niepustemu, wtedy dla takiego samego sprawdzenia, dla takiego samego numeru o numerze {{LinkPatrz|który}}, gdy artykuł jest nierówny ciągowi niepustemu, wtedy gdy {{LinkPatrz|nazwa-p.PobierzNumerLubNazweArtykulu}} nie jest niepusta, wtedy zwracana jest nazwa artykułu {{LinkPatrz|artykul}}, przeciwnie nazwa linku artykułu, tzn. {{Code|nazwa}} {{LinkPatrz|nazwa}}. A jeśli {{LinkPatrz|artykul}} jest jednak równy ciągowi pustemu, to wtedy jest zwracany rozdział {{LinkPatrz|rozdzial}}. ===== Dalsza część opisu funkcji {{Code|__FUNKCJA}} ===== Liczony jest numer artykułu {{LinkPatrz|numer_artykulu}} przy pomocy funkcji: {{LinkŚródtytuł|NumerArtykulu}}. Gdy jest spełniony warunek z: {{LinkZobaczTeż|Parametry bez przetwarzania}}, wtedy {{ZobaczTeż|WynikArtykulowyZNumeru}} jest liczony wynik {{Code|wynik}} {{Patrz|wynik}} z funkcji: {{LinkŚródtytuł|WynikArtykulowyZNumeru}}. Gdy {{LinkPatrz|wynik}} istnieje, wtedy jest zwracany on w pierwszym parametrze, a w drugim zmienna {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}. Gdy {{Code|numer_spisu}} {{LinkPatrz|numer_spisu}} istnieje, i jest równy {{Code|1}}, wtedy dla istniejącego {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}} jest podobnie liczone i zwracane, jak w punkcie {{LinkZobaczTeż|WynikArtykulowyZNumeru}}. A gdy jednak {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}} nie istnieje, wtedy numer artykulu {{LinkPatrz|numer_artykulu}} zamieniamy na tabelę na podstawie funkcji: {{LinkŚródtytuł|p.ZamienNumerArtykuluNaTabele}}, usuwamy zbędne początkowe jedynki dzięki funkcji: {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, z tabeli. Tą tabelę {{ZobaczTeż|łączenie tabeli numeru}} zamieniamy na łańcuch znakowy z łącznikiem przy pomocy funkcji: {{LzLua|table.concat}}. Dalej robimy jak w: {{LinkZobaczTeż|WynikArtykulowyZNumeru}}. W innym wypadku, jeśli nie zwrócono wynik, wtedy liczymy numer spisu, w którym jest dany artykuł, czy rozdział, z funkcji: {{LinkŚródtytuł|p["PobierzNumerArtykułu"]}}. Jeżeli ten spis nie istnieje, to podobnie robimy jak w punkcie: {{LinkZobaczTeż|WynikArtykulowyZNumeru}}, przeciwnie: integrujemy numer spisu z numerem artykułu, używając funkcji: {{LinkŚródtytuł|p.IntegrowanieNumeracjiArtykuluZWyliczaniemSpisuTresci}}. A jeżeli spis ten nie znajduje się w rozdziale głównym, wtedy robimy operację: {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}. Wykonujemy operację jak w: {{LinkZobaczTeż|łączenie tabeli numeru}}. A następnie podobnie robimy jak w: {{LinkZobaczTeż|WynikArtykulowyZNumeru}}. ==== Dalsza część funkcji ==== Wywoływana jest tutaj funkcja: {{LinkŚródtytuł|__FUNKCJA-PobierzNazwęArtykułu}}, która zwraca dwie dane, tzn. nazwę rozdziału lub artykułu na podstawie jego numeru. Drugą wartością zwracaną jest, czy to znajduje się, co to pierwsze opisuje w rozdziale głównym. Główna definicja funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul=require("Module:StronicowyParser/NumerLubNazwaArtykułówKsiążek/Potrzebne"); local wartosc,glowny_spis_tresci_lub_rozdzial_ksiazki=stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul.PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,true); return wartosc,glowny_spis_tresci_lub_rozdzial_ksiazki; </syntaxhighlight> === {{Śródtytuł|p["PobierzDaneKsiążki"]}}{{Code|p["PobierzDaneKsiążki"]}} === Funkcja zbierania informacji o wszystkich spisach, tzn. wiadomości o każdym rozdziale i wszystko o linkach, tzn. o ich artykułach, nawet prowadzące na inne strony na {{NS|l=tak}}, lub poza nim, a nawet o ich przetworzonych nazwach. Funkcja jest implementowana w ramce {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, tzn. {{m|StronicowyParser|PobierzDaneKsiążki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p["PobierzDaneKsiążki"]=function(frame,tabela_listy_danych_analizy_ksiazki)...end; </syntaxhighlight> Parametry funkcji: * {{Code|frame}} - jak w: {{LinkPatrz|frame}}, * {{Code|tabela_listy_danych_analizy_ksiazki}} - jak w: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}. ==== {{Śródtytuł|__FUNKCJA-PobierzDaneKsiążki}}{{Code|__FUNKCJA}} ==== Jest to funkcja do pobierania danych informacji o spisach. Definicja skrótowa funkcji jest bardzo podobna do: {{LinkZobaczTeż|__FUNKCJA-PobierzNumerArtykułu}}, a on ściślej wygląda trochę inaczej, a więc: <syntaxhighlight lang="lua"> local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_lub_rozdzial_ksiazki,czy_dodane,czy_inna_ksiazka,czy_url)...end; </syntaxhighlight> Parametry funkcji: * Te same parametry, co w: {{LinkZobaczTeż|Parametry-PobierzNumerArtykułu}}, * {{Code|czy_dodane}} {{Patrz|czy_dodane}} - czy element artykułu bez nagłówka jest dodany do tabeli uzyskanego zebranego spisu, by zachować ciągłość numeracji, * {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}} - czy przekierowanie wskazuje na artykuł w innej książce, jeżeli strona główna książki nie przekierowuje do danej bieżącej książki, * {{Code|czy_url}} {{Patrz|czy_url}} - czy artykuł jest '''URL''', czyli czy jest adresem strony internetowej. Jeżeli parametr artykułu podanego spisu {{Code|artykul_spisu}} {{LinkPatrz|artykul_spisu}} i nazwy spisu {{Code|nazwa_spisu}} {{LinkPatrz|nazwa_spisu}} istnieją, wtedy funkcja sygnalizuje zatrzymanie się algorytmu: {{LinkŚródtytuł|p.PobierzNumerLubNazweArtykulu}}, po przeanalizowaniu się jego od początku pierwszego spisu. Jest tworzona pusta nowa zmienna tablicowa {{Code|tab_dane_ksiazki}} {{Patrz|tab_dane_ksiazki}}, a następnie jest tworzona jego pusta podtablica o kluczu {{Code|rozdzial}} {{LinkPatrz|rozdzial}}, co z tego jest tworzone {{Code|tab_rozdzial}} {{Patrz|tab_rozdzial}}. Dalej jest tworzona zmienna {{Code|numer_rozdzialu}} {{Patrz|numer_rozdzialu}} ze zmiennej tablicowej {{Code|tab_numer}} {{LinkPatrz|tab_numer}} z łącznikiem kropka przy pomocy funkcji: {{LzLua|table.concat}}. {{Tab}}Gdy {{LinkPatrz|nazwa_spisu}} i numer spisu {{Code|numer_spisu}} {{LinkPatrz|numer_spisu}} istnieją, a: {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, już nie, lub gdy {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki_poprz}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki_poprz}} (jest to poprzednie: {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}) i aktualne {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, istnieją, i jednocześnie {{LinkPatrz|numer_rozdzialu}} jest łańcuchem znaków niepustym, wtedy liczymy: Jeśli {{LinkPatrz|numer_spisu}} jest równy {{Code|1}}, czyli jest pierwszym spisem treści, i w podinstukcji {{Code|glowny_spis_tresci_lub_rozdzial_ksiazki}} {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}} nie istnieje, wtedy {{LinkPatrz|numer_rozdzialu}} jest zamieniane na tabelę: {{LinkŚródtytuł|p.ZamienNumerArtykuluNaTabele}}, co dalej w tym są usuwane początkowe jedynki na podstawie: {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, co dalej to jest zamieniane na numerację rozdziału {{LinkPatrz|numer_rozdzialu}} z tym samym łącznikiem tą samą funkcją, co na samym początku tego rozważania przy tej zmiennej. Przeciwnie niż w poprzednim akapicie jest liczony numer spisu treści z funkcji: {{LinkŚródtytuł|p["PobierzNumerArtykułu"]}}, co jest łączone z {{LinkPatrz|numer_rozdzialu}} w większy numer rozdziału dzięki: {{LinkŚródtytuł|p.IntegrowanieNumeracjiArtykuluZWyliczaniemSpisuTresci}}, a jeśli spis znajduje się w spisie jako artykuł, nie jako w głównym rozdziale, wtedy są usuwane początkowe jedynki według: {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, co następie jest tworzone ostateczna wersja numeru rozdziału z tak otrzymanej tabeli w łańcuch znaków {{LinkPatrz|numer_rozdzialu}}. {{Tab}}Jeśli nie jest ustawione, że rozdział dany w spisie, że nie jest pierwszy, czyli: {{Code|pierwszy_spis_tresci}} {{Patrz|pierwszy_spis_tresci}}, a nazwa spisu {{LinkPatrz|nazwa_spisu}} i numer spisu {{LinkPatrz|numer_spisu}}, istniją, a także: {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki_poprz}}, nie istnieje, a za to: {{LinkPatrz|glowny_spis_tresci_lub_rozdzial_ksiazki}}, istnieje, i {{LinkPatrz|numer_rozdzialu}} nie jest rozdziałem o ciągu pustym, a jeśli rozdział jest spisem treści, czy spisem rzeczy, wtedy jest ustawiana prawdziwość zmiennej {{LinkPatrz|pierwszy_spis_tresci}}, następnie dla {{LinkPatrz|numer_rozdzialu}} jest zamieniane na tabelę, dzięki: {{LinkŚródtytuł|p.ZamienNumerArtykuluNaTabele}}. Co dalej są usuwane początkowe jedynki na podstawie: {{LinkŚródtytuł|p.UsuwaniePierwszychJedynekZWyliczaniaSpisuTresci}}, co to później jest zamienane na łańcuch znaków w: {{LinkPatrz|numer_rozdzialu}}. ---- Z tego {{LinkPatrz|tab_rozdzial}} tworzymy podtablicę o kluczu {{LinkPatrz|numer_rozdzialu}}, jeśli nie istnieje, co z tego mamy {{Code|tab_numer_rozdzialu}} {{Patrz|tab_numer_rozdzialu}}, co dalej na podstawie tego dalej tworzymy podtablicę o kluczu {{Code|artykul}} {{LinkPatrz|artykul}}, jeżeli nie istnieje, co dzięki temu mamy: {{Code|tab_artykul}} {{Patrz|tab_artykul}}. Tworzymy numer artykułu {{Code|numer_artykulu}} {{LinkPatrz|numer_artykulu}} z {{Code|tab_poziomowo}} {{LinkPatrz|tab_poziomowo}} z łącznikiem kropką, przy pomocy: {{LzLua|table.concat}}. Następnie tworzymy podtablicę z {{LinkPatrz|tab_artykul}} z klucza {{LinkPatrz|numer_artykulu}}, jeśli nie istnieje, tworząc: {{Code|tab_numer_artykulu}} {{LinkPatrz|tab_numer_artykulu}}. ---- Z tablicy {{LinkPatrz|tab_numer_artykulu}}, modyfikujemy tą podtablicę dodając do jego końca elementy na podstawie: <syntaxhighlight lang="lua"> table.insert(tab_numer_artykulu,{["przekierowanie"]=czy_tabelka and przekierowanie[1] or ((not czy_tabelka) and przekierowanie or nil),["kod języka"]=czy_tabelka and przekierowanie[3] or nil,["kod projektu"]=czy_tabelka and przekierowanie[4] or nil,["pełna nazwa książki"]=(czy_tabelka and przekierowanie[2]) and nazwy_modul["NazwaModułu"](przekierowanie[2][1],przekierowanie[2][2],przekierowanie[2][3],"") or nil,["link"]=czy_tabelka and przekierowanie[5] or nil,["nazwa"]=nazwa,["spis treści"]=czy_nienilowy_rozdzial,["czy w podręczniku"]=(((artykul~="")or(numer_artykulu~="")) and ((czy_artykuly_podrecznikowe) and true or nil) or nil),["dodane"]=czy_dodane,["numer"]=s,["inna książka"]=czy_inna_ksiazka,["url"]=czy_url,}); </syntaxhighlight> Na samym końcu, po dojściu do tego momentu funkcja zawsze zwraca wartość {{Code|false}}, czyli procedura: {{LinkŚródtytuł|p.PobierzNumerLubNazweArtykulu}}, na tej funkcji, czyli:{{LinkŚródtytuł|__FUNKCJA-PobierzDaneKsiążki}}, nie zatrzymuje się. ==== Dalsza część funkcji ==== Wywoływana jest tutaj funkcja: {{LinkŚródtytuł|__FUNKCJA-PobierzDaneKsiążki}}, która nie zwraca żadnych danych, tylko modyfikuje zmienną w wyższej funkcji. Funkcja zwraca tabelę '''JSON''' przy pomocy funkcji: {{LzLua|mw.text.jsonEncode}}, z ustawieniem: {{Code|mw.text.JSON_PRESERVE_KEYS}}, która numeruje indeksu w takiej formie jak jest użyte w języku {{lpg|Lua}} w {{Lpr|Lua|Scribunto}}, jeśli nie jest ustawiona zmienna: {{Code|kodowanie_nie_json}}, przeciwnie: jest zwracana ta tabela nie zamieniona na zmienną '''JSON'''. Główna definicja funkcji: <syntaxhighlight lang="lua"> ---- Tą zmienną, tzn.: tab_dane_ksiazki, inicjuje funkcja lokalna: __FUNKCJA, by potem ją zwrócić jako tabelę Lua w Scribunto, albo jaką tabelę JSON, którą można użyć do przetwarzania w języku JavaScript; local tab_dane_ksiazki=nil; ... local stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul=require("Module:StronicowyParser/NumerLubNazwaArtykułówKsiążek/Potrzebne"); stronicowyparser_numerlubnazwaartykulowksiazek_potrzebne_modul.PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false,true); ---- Jeśli zapisujemy jako tabelę: JSON, to zapisujemy ją z zachowaniem dla parametrów numerowanych ich numerów, czyli takie tablice z nimi zapisjemy jako tabelę z kliczami, którymi są łańcuchu znakowe, a więc tworzymu ją jako tablice asocjacyjne; return (not kodowanie_nie_json) and mw.text.jsonEncode(tab_dane_ksiazki,mw.text.JSON_PRESERVE_KEYS) or tab_dane_ksiazki; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rhtfkmg45ew6iy0klyfnuy5viwc1in9 Żeglarz jachtowy/Kabina 0 63775 552418 547973 2026-08-19T08:04:46Z BJPB110 38631 /* Kambuz */ 552418 wikitext text/x-wiki '''Kabina''' to przestrzeń mieszkalna dla uczestników rejsu. Służy też do przechowywania rzeczy i zapasów. == Części kabiny == Poszczególne miejsca w kabinie spełniają funkcje takie, jak pomieszczenia w zwykłym domu mieszkalnym, ale mają swoje własne nazwy: === Zejściówka === Zejściówka umożliwia przejście z kokpitu do kabiny, po drabince lub schodkach. Należy wchodzić i schodzić przodem do drabinki. Zejściówkę zamyka się przy pomocy dwóch płyt (najczęściej są to szyby): sztorcklapy i suwklapy. Suwklapa (pozioma) wysuwa się z nadbudówki, a sztorcklapę (pionową) wsuwa się, zamykając dolną część przejścia. === Okna === Okna z boku kabiny to bulaje. Okna w suficie to luki. Luk wychodzący na pokład dziobowy to forluk. === Mesa === Mesa to miejsce spożywania posiłków. Funkcję stołu spełnia tam najczęściej zabudowana skrzynia mieczowa ze składanym blatem. === Kambuz === Kuchnia na jachcie nazywa się kambuz. Kambuz posiada przede wszystkim kuchenkę, zazwyczaj gazową (wbudowaną lub przenośną). Kuchenki wbudowane na jachtach morskich mają mechanizm poziomujący (neutralizujący wpływ przechyłu jachtu, można go zablokować). Przy zapalaniu/wygaszaniu kuchenki należy najpierw odpowiednio odkręcić/zakręcić zawór butli, a potem palnika. Kambuz może też mieć lodówkę, zlewozmywak i szuflady, szafki i półki na zapasy, sztućce i naczynia. Wszelkiego rodzaju półki i szafki w kabinie noszą nazwę jaskółek. === Kingston === Kingston to łazienka. Znajduje się tam toaleta chemiczna (częściej na jeziorach) lub ze zbiornikiem nieczystości, opcjonalnie z zrzutem ścieków za burtę (na morzu). Zrzutu nigdy nie dokonuje się na postoju ani w pobliżu brzegu. Do toalety nie powinno trafiać nic, co nie przeszło wcześniej przez układ trawienny (poza wodą ze spłuczki). W kingstonie znajduje się też często umywalka, a czasami prysznic. Jachty na ciepłych morzach (np. w Chorwacji) posiadają też często drugi prysznic na zewnątrz, na rufie, który służy do opłukania się z soli po kąpieli w morzu. === Koja === Łóżko na jachcie określa się jako koję. Pod kojami mogą znajdować się bakisty na np. żywność. Koje znajdują się typowo po burtach, na dziobie i na rufie. Większe jachty mają osobne pomieszczenia sypialne. jlzkrq1akquet4hfuiqwc5k7uuro7up Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom IV 4 63919 552411 551922 2026-08-19T05:46:33Z Persino 2851 /* {{Śródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} */ 552411 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu {{s|HNumer}}, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> eie4qohsfl97xcv4g9rp931m8wrzq01 552424 552411 2026-08-19T10:22:16Z Persino 2851 /* {{Śródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} */ 552424 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu {{s|HNumer}}, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8dqxz0l5elwrild31znojqjzn1u0m61 552425 552424 2026-08-19T10:38:41Z Persino 2851 552425 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTez|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie, też jego zawartość po pierwszym parametrem, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszczew jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitą zawartość, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w vazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł to zwraca, a jeżeli nie to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału,generowanego przez jakiś szablon, i tak w kółko. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0n1l8u72bh8gzv45m53ez7twepsn50r 552426 552425 2026-08-19T10:39:03Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552426 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie, też jego zawartość po pierwszym parametrem, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszczew jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitą zawartość, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w vazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł to zwraca, a jeżeli nie to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału,generowanego przez jakiś szablon, i tak w kółko. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qsro38tmkowlmo9hx9v3phw4d039ji3 552427 552426 2026-08-19T10:39:55Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552427 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie, też jego zawartość po pierwszym parametrem, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszczew jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitą zawartość, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w vazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł to zwraca, a jeżeli nie to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału,generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fcpow833mywl3o6raydqf5ko15l3887 552428 552427 2026-08-19T10:40:34Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552428 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie, też jego zawartość po pierwszym parametrem, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitą zawartość, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w vazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł to zwraca, a jeżeli nie to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału,generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2skxutolwh3d33wxvt9zqmzzeb7og9l 552429 552428 2026-08-19T10:45:19Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552429 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> eocl21h7kcp2knrol6bwn9nym777uey 552430 552429 2026-08-19T10:54:53Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552430 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ghq75cluh82oqcbd7h4ljg57dj2yh7q 552431 552430 2026-08-19T10:59:13Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552431 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Przykład wywołania: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Opis parametrów zwracanych zostały omówione w tekście dokumentacji tej funkcji. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3iltqdsrp489hiz84nnabd8yx2jndk1 552432 552431 2026-08-19T11:06:22Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552432 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Przykład wywołania: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} i {{Code|ZNACZNIK}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany telst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji daklszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n7ambx1nf0g8agsgygv4784zxv1v2uv 552433 552432 2026-08-19T11:07:09Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552433 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Przykład wywołania: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} i {{Code|ZNACZNIK}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nvxinjgzvkzakrsv1h77al45uf2jzgv 552434 552433 2026-08-19T11:12:31Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552434 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} i {{Code|ZNACZNIK}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> at096rxf659hdd1xnxq5ocrnyq5wx2v 552436 552434 2026-08-19T11:27:08Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552436 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, } </syntaxhighlight> Inne linki używane do definiowania spisów treści: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1ihtph6otfzao9mg0j1dcxwmn47bfxw 552437 552436 2026-08-19T11:29:20Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552437 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, } </syntaxhighlight> Inne linki używane do definiowania spisów treści {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> evcgewb1ycss011uogs76klmjhl1g4c 552438 552437 2026-08-19T11:35:03Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552438 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, } </syntaxhighlight> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}: Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3p4v2thd6tn6vitgiy3kez5ww4v2ncr 552439 552438 2026-08-19T11:35:38Z Persino 2851 /* {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} */ 552439 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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, } </syntaxhighlight> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5gz93tv6w6uho67q8m7rk5n263qm0ge Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy 4 63923 552435 551770 2026-08-19T11:18:08Z Persino 2851 /* Spis treści */ 552435 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}} Funkcje do analizy i wydzielania, ze strony, dowolnego spisu rzeczy należącego do książki w przestrzeni nazw, nawet niby, czyli: '''{{Np|(main)|link=tak}}''', '''{{Np|Wikijunior|link=tak}}''', '''{{lr2|Brudnopis}}/<użytkownik>''' i '''{{Np|User|link=tak}}/<użytkownik>'''. Moduł posiada specjalistyczne funkcje wyszukujące tekst według wzoru od przodu, jak i od tyłu, jak i funkcje znajdujące szcziśle określone elementy niezaleznie w jakim porzodku, ale kolejność sie liczy, tzn. do przodu lub wsteczna. Funkcja wyszukuje rozdziały, w tym rozdział: '''Spis tresci''', czy: '''Spis rzeczy''', niezależnie jak znormowane, od tyłu, znajdując rozdziały najbliższe przed sobą, nawet wyszukując je kolejne. == Spis treści == Poszcególne moduły opisują, dla przejrzysości podzielone na nie, poszczególne funkcje w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}, a te strony z nimi: * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I}} - są do moduły do wyszukiwania napisów wprowadzenia tekstu przede wszystkim zerowych, ale też mozna sprawdzić, czy przypadkiem to jest rozdział centrowany, aby go czasami wykluczyć z obliczeń, * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom II}} - są do sprawdzania, czy szablon, obiekt typu: {{Code|SZABLON}}, czy inne: {{Code|LINKW}} i {{Code|LINKZ}}, są obiektami spisu treści podręcznika, a jeżeli tak, to funkcja zwraca wartość prawdziwości (powodzenia), lub do rewidowania, czy w linii niebędącej pozycją ujemną, czy tam są w ogóle elementy symbolizujące jakiegoś rodzaju linki spisu rzeczy, tam przedstawiane szablony albo to są szablony linków inteligetnych - czyli szablonu spisu, jak i inne linki typowo spisowe, używane tylko w spisach, a nie w treściwych częściach książki, * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom III}} - do przeszukiwania ciągów znakowych podanych w tekście lub wewnątrz linii, w postaci przechwytywanych ciągów znakowych (ich jest maksymalnie dziewięć), one zwracają początek i koniec ostatniego dopasowania według kryteriów, * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom IV}} - wyszukujące rozdziały lub w samym nagłówku, które mają odpowiednie lub nie zawartości, takiego pierwszego, od tyłu, lub do przodu, * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom V}} * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom VI}} * {{lru|Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom VII}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 403xhe9p0puomch6tiav7uxsv7dxruc Szablon:Brudnopis/Persino/NAZWASERWISU 10 63961 552381 552380 2026-08-18T17:41:17Z Persino 2851 552381 wikitext text/x-wiki <includeonly>{{#invoke:Nazwy|NAZWASERWISU}}<!-- -->{{#if:{{{bez dodatkowych sprawdzeń|}}}||<!-- -->{{#invoke:Sprawdź|Parametry | = problemy-w-szablonie-%s {{((}}Kategoria{{!}}Szablon %s do sprawdzenia{{))}} | 1 = ;nazwa;n;l?!;link?! | nazwa = 1;n;l?!;link?! | n = ;1;nazwa;l?!;link?! | przypadek = {{NAZWASERWISU/przypadek}};pk | pk = {{NAZWASERWISU/przypadek}};przypadek | za = ;z | z = ;za | po = ;p | p = ;po | link = ;l? | l = ;link? | wikipedia = ;w;l?!;link?! | w = ;wikipedia;l?!;link?! | klucz projektu = ;kod języka;kj;kod projektu;kp;k | k = ;kod języka;kj;kod projektu;kp;klucz projektu | kod języka = ;klucz projektu;k;kj | kj = ;klucz projektu;k;kod języka | kod projektu = ;klucz projektu;k;kp | kp = ;klucz projektu;k;kod projektu | w języku wiki = ;jw | jw = ;w języku wiki | bez znaczników = ;bz;l?!;link?! | bz = ;bez znaczników;l?!;link?! | bez przetwarzania = ;bp;l?!;link?! | bp = ;bez przetwarzania;l?!;link?! }}<!-- -->}}</includeonly><noinclude> {{Brudnopis/Persino/NAZWASERWISU|link=tak|k=w|w=tak}} {{Brudnopis/Persino/NAZWASERWISU|l=tak|w=tak|kj=en}} {{Brudnopis/Persino/NAZWASERWISU|l=|w=tak|kj=en}} {{Brudnopis/Persino/NAZWASERWISU|link=tak|l=|k=w|w=tak}} {{Brudnopis/Persino/NAZWASERWISU|link=|l=tak|k=w|w=tak}} {{Brudnopis/Persino/NAZWASERWISU|link=tak|l=tak|k=w|w=tak}} {{Brudnopis/Persino/NAZWASERWISU|link=|l=|k=w|w=tak}} </noinclude> e2oo5coh6e2xwxqknd2dezaqakxbmdy