Moduł:Ramka
Wygląd
Zobacz podstrony tego modułu.
|
local p={};
function SzablonModulParserWywolanie(frame, co_ma_wywolac)
local pf=frame:getParent();
local nazwa_szablonu_modulu_lub_parsera="Nazwa";
local szablon_modul_lub_parser=frame.args[nazwa_szablonu_modulu_lub_parsera];
local argumenty_szablonu_modulu_lub_parsera={};
local tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica={};
local bez_parametrow={[nazwa_szablonu_modulu_lub_parsera]=true,
["bez argumentów rodzica"]=true,
["nazwa szablonu rodzica"]=true,
["bez argumentów nienazwanych rodzica"]=true,
["potomek"]=true,
["nie potomek"]=true,
["parametry rodzica"]=true,
["zmienna z parametrami rodzica"]=true,
["zmienna z argumentami ramki"]=true,
["zmienna z nazwą szablonu rodzica"]=true,
["parametry funkcji modułu pudełek"]=true,
["parametry podstawowe funkcji modułu pudełek"]=true,
};
if(co_ma_wywolac==1)then bez_parametrow["Funkcja"]=true;end;
for nazwa_parametru,wartosc_parametru in pairs(frame.args) do
if((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))then
tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica[nazwa_parametru]=nazwa_parametru;
argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
end;
end;
local parametry_modul=require("Module:Parametry");
local szablonowe_modul=require("Module:Szablonowe");
local tabela_bez_argumentow=p.RozpakujArgumenty(frame.args["bez argumentów rodzica"]);
local czy_przekazac_parametry_rodzica=parametry_modul.CzyTak(frame.args["zmienna z parametrami rodzica"]);
local z_dodatkowymi_sprawdzeniami=not(parametry_modul.CzyTak(frame.args["bez dodatkowych sprawdzeń"]) or parametry_modul.CzyTak(pf.args["bez dodatkowych sprawdzeń"]));
local PakujArgumentyRamki = function(args)
local czy_tylko_ze_zmienna_bez_argumentow_szablonu=args["zmienna z argumentami ramki"];
if(not parametry_modul.CzyTak(czy_tylko_ze_zmienna_bez_argumentow_szablonu))then return args["bez argumentów szablonu"];end;
local tabelka1={};
for nazwa_parametru,_ in pairs(args)do
if((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))then
tabelka1[nazwa_parametru]=true;
end;
end;
local tabelka2=(args["bez argumentów szablonu"]) and p.RozpakujArgumenty(args["bez argumentów szablonu"]);
local tabelka=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2);
local tablica_mikroszablonow={
[";"]="{{+}}",
};
local str="";
for name,_ in pairs(tabelka) do
str=str..((str~="")and ";" or "")..mw.ustring.gsub(mw.text.trim(name),".",tablica_mikroszablonow);
end;
return str,tabelka2;
end;
local bez_argumentow_szablonu=nil;
if(czy_przekazac_parametry_rodzica)then
if(z_dodatkowymi_sprawdzeniami)then
local str=p.PakujParametry(pf.args);
argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=str;
end;
argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"],bez_argumentow_szablonu=PakujArgumentyRamki(frame.args);
argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle());
else
local function ZmiennaZNazwaSzablonuRodzica()
local czy_ze_nazwa_szablonu=frame.args["zmienna z nazwą szablonu rodzica"];
if(parametry_modul.CzyTak(czy_ze_nazwa_szablonu))then
argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle());
end;
end;
local z_argumentami_najwyzszego_rodzica=not parametry_modul.CzyTak(tabela_bez_argumentow["nie potomek"]);
if(z_argumentami_najwyzszego_rodzica)then
local potomek=parametry_modul.CzyTak(pf.args["potomek"]);
if(potomek)then
local parametry_rodzic=pf.args["parametry rodzica"];
if(parametry_rodzic)then
if(z_dodatkowymi_sprawdzeniami)then
argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=parametry_rodzic;
end;
argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"],bez_argumentow_szablonu=PakujArgumentyRamki(frame.args);
argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle());
else
ZmiennaZNazwaSzablonuRodzica();
end;
else
ZmiennaZNazwaSzablonuRodzica();
end;
else
ZmiennaZNazwaSzablonuRodzica()
end;
end;
local czy_bez_argumentow_nienazwanych_rodzica=parametry_modul.CzyTak(frame.args["bez argumentów nienazwanych rodzica"]);
local czy_parametry_pudelka=parametry_modul.CzyTak(frame.args["parametry funkcji modułu pudełek"]);
local czy_parametry_pudelka_podstawowe=parametry_modul.CzyTak(frame.args["parametry podstawowe funkcji modułu pudełek"])
local pudelko_modul=require("Module:Pudełko");
for nazwa_parametru,wartosc_parametru in pairs(pf.args) do
if(((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))and((not bez_argumentow_szablonu)or(not bez_argumentow_szablonu[nazwa_parametru])))then
if((not tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica[nazwa_parametru])
and(not tabela_bez_argumentow[nazwa_parametru])
and((not czy_bez_argumentow_nienazwanych_rodzica)or((czy_bez_argumentow_nienazwanych_rodzica)and(not tonumber(nazwa_parametru)))
))then
local czy_dodac_do_parametrow;
if czy_parametry_pudelka or czy_parametry_pudelka_podstawowe then
local czy_dodac_do_parametrow=((not czy_parametry_pudelka_podstawowe)
and mw.ustring.match(nazwa_parametru,"^nazwa przestrzeni nazw %d+$")
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
or (mw.ustring.match(nazwa_parametru,"^nazwa przestrzeni nazw$")
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
or ((not czy_parametry_pudelka_podstawowe)
and mw.ustring.match(nazwa_parametru,"^nazwa jednostki %d+$")
and wartosc_parametru~=""
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
or (mw.ustring.match(nazwa_parametru,"^nazwa jednostki$")
and wartosc_parametru~=""
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
or ((not czy_parametry_pudelka_podstawowe)
and mw.ustring.match(nazwa_parametru,"^typ jednostki %d+$")
and wartosc_parametru~=""
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
or (mw.ustring.match(nazwa_parametru,"^typ jednostki$")
and wartosc_parametru~=""
and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru));
if(czy_dodac_do_parametrow)then
argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
end;
else
argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
end;
end;
end;
end;
if(co_ma_wywolac==0)then
return pf:expandTemplate{title=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
elseif(co_ma_wywolac==1)then
local frame2=pf:newChild{args=argumenty_szablonu_modulu_lub_parsera};
local funkcja=frame.args["Funkcja"];
return require("Module:"..szablon_modul_lub_parser)[funkcja](frame2);
elseif(co_ma_wywolac==2)then
return pf:callParserFunction{name=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
else
return pf:expandTemplate{title=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
end;
end;
local function Skladaj_lancuch(frame,tab_lancuch,minimum,maksimum)
local parametry_modul=require("Module:Parametry");
local czy_akapit=parametry_modul.CzyTak(frame.args["akapit"]);
local akapit=czy_akapit and "\n\n" or "";
local przecinek=parametry_modul.CzyTak(frame.args["przecinek"]) and ", " or "";
local czy_nowa_linia=parametry_modul.CzyTak(frame.args["nowa linia"]);
local nowa_linia=czy_nowa_linia and "\n" or "";
local wyliczanka=parametry_modul.CzyTak(frame.args["wyliczanka"]);
local przecinek_na_poczatku=parametry_modul.CzyTak(frame.args["początek"]);
local myslnik=parametry_modul.CzyTak(frame.args["myślnik"]);
local warunkowe=parametry_modul.CzyTak(frame.args["warunkowe"]);
local lancuch_znakow="";
local koniec=#tab_lancuch;
for i=1,koniec,1 do
local lancuch=tab_lancuch[i];
lancuch,_=mw.ustring.gsub(lancuch,"{{min}}",minimum);
lancuch,_=mw.ustring.gsub(lancuch,"{{max}}",maksimum);
if(not wyliczanka)then
lancuch_znakow=lancuch_znakow..((i~=1)and przecinek or ((przecinek_na_poczatku)and przecinek or ((myslnik)and " - " or "")));
else
lancuch_znakow=lancuch_znakow..((i==1)and ((przecinek_na_poczatku)and ", " or "") or ((i<koniec)and ", " or " i "));
end;
lancuch_znakow=lancuch_znakow..((i~=1)and (czy_akapit and akapit or nowa_linia) or "")..lancuch;
end;
if(warunkowe)then
return p.InstrukcjeWarunkowe(lancuch_znakow,true);
else
return lancuch_znakow;
end;
end;
p.InstrukcjeWarunkowe = function(ciag,derektywy_specjalne)
local ciag_warunkowe_fun=function(s)
local function ParserWiki(s,wywolanie)
local czy_parser=mw.ustring.match(s,wywolanie);
if(czy_parser)then
return mw.getCurrentFrame():preprocess(s);
end;
end
return ParserWiki(s,"^({{%s*#if:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#ifeq:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#switch:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#ifexpr:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#expr:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#iferror:[^{}]*}})$")
or ParserWiki(s,"^({{%s*#ifexist:[^{}]*}})$")
or nil;
end;
local ciag,_=mw.ustring.gsub(ciag,"{{[^{}]+}}",ciag_warunkowe_fun);
if(derektywy_specjalne)then
local tab_zamieniane={
["__!__"]="|",
["__!!__"]="||",
["__(__"]="{",
["__((__"]="{{",
["__(((__"]="{{{",
["__)__"]="}",
["__))__"]="}}",
["__)))__"]="}}}",
["__!(__"]="[",
["__!((__"]="[[",
["__)!__"]="]",
["__))!__"]="]]",
};
ciag=mw.ustring.gsub(ciag,"__[^_]+__",tab_zamieniane);
return ciag;
end;
return ciag;
end;
p.RozpakujArgumenty = function(zmienna_z_argumentami)
local tablica_mikroszablonow={
["{{+}}"]=";",
};
local tabela_bez_argumentow={};
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(zmienna_z_argumentami))then
local iter=mw.text.gsplit(zmienna_z_argumentami,";",true);
local podlancuch;
for podlancuch in iter do
podlancuch=mw.text.trim(podlancuch);
local liczba=tonumber(podlancuch);
tabela_bez_argumentow[liczba or mw.ustring.gsub(podlancuch,"{{[^{}]+}}",tablica_mikroszablonow)]=true;
end;
end;
return tabela_bez_argumentow;
end;
p.PakujParametry = function(args)
return mw.text.jsonEncode(args,mw.text.JSON_PRESERVE_KEYS);
end;
p.RozpakujParametry = function (zmienna_z_parametrami)
return mw.text.jsonDecode(zmienna_z_parametrami,mw.text.JSON_PRESERVE_KEYS);
end;
p["Rozwiń"] = function(frame)
return frame:getParent():preprocess(frame.args[1]);
end;
p["Log"] = function(frame)
local wikitekst=frame.args[1];
mw.log(wikitekst);
return wikitekst;
end;
p["Szablon"] = function(frame)
return SzablonModulParserWywolanie(frame,0);
end;
p["Moduł"] = function(frame)
return SzablonModulParserWywolanie(frame, 1);
end;
p["Parser"] = function(frame)
return SzablonModulParserWywolanie(frame, 2);
end;
p["T"] =function(frame)
local parametry_modul=require("Module:Parametry");
local args_szablon=parametry_modul.PobierzArgsParametry(frame);
local args_ksiazka={};
for name,value in pairs(args_szablon)do
if(not parametry_modul.TypeNumber(name))then
args_ksiazka[name]=value;
elseif(name>1)then
args_ksiazka[name-1]=value;
elseif(name~=1)then
args_ksiazka[name]=value;
end;
end;
if(parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))then
args_ksiazka["wyspecjalizowana"]=nil;
end;
local szablon=args_szablon[1];
local szablon_ksiazka=p["N"]{args={[1]=szablon,}};
local pf=frame:getParent();
return pf:expandTemplate{title=szablon_ksiazka,args=args_ksiazka,};
end;
p["N"]=function(frame)
local parametr=frame.args[1];
local parametry_modul=require("Module:Parametry");
local parametr_p=tonumber(frame.args["p"]) or 0;
local parametr_n=parametry_modul.CzyTak(frame.args["n"]);
local szablon=parametry_modul["CzyTakCiąg"](parametr) and parametr or ((parametr_p==1) and "Nieznany moduł" or ((parametr_p==2) and "Nieznana kategoria" or "Nieznany szablon"));
szablon=parametry_modul["Odstępy"]{[1]=szablon,[2]="tak",};
szablon=mw.getContentLanguage():ucfirst(szablon);
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local przestrzen=((parametr_p==1) and nazwy_np_modul.Module or ((parametr_p==2) and nazwy_np_modul.Category or nazwy_np_modul.Template));
local szablon_ksiazka=przestrzen..":Książka:"..szablon;
local parametr_k=parametry_modul.CzyTak(frame.args["k"]);
if(not parametr_k)then
local techniczne_modul=require("Module:Techniczne");
local liczba_title,tab_title=techniczne_modul.PoliczZbiory{[1]=szablon_ksiazka,};
szablon_ksiazka=((liczba_title>0)and (szablon_ksiazka) or (przestrzen..":"..szablon));
end;
if(parametr_n)then
local nazwy_modul=require("Module:Nazwy");
szablon_ksiazka=nazwy_modul["NAZWASTRONY"]{nazwa=szablon_ksiazka,};
end;
return szablon_ksiazka;
end;
p["A"]=function(frame)
local parametr=frame.args[1];
local parametry_modul=require("Module:Parametry");
local parametr_p=parametry_modul.CzyTak(frame.args["p"]);
local przestrzen;
if(parametr_p)then
local nazwy_modul=require("Module:Nazwy");
przestrzen=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=parametr,};
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
if((przestrzen~=nazwy_np_modul.Template)and(przestrzen~=nazwy_np_modul.Module)and(przestrzen~=nazwy_np_modul.Category))then
return parametr;
end;
parametr=nazwy_modul["NAZWASTRONY"]{nazwa=parametr,};
end;
parametr=mw.ustring.gsub(parametr,"^[Kk]siążka:","");
parametr=(parametr_p and ((przestrzen~="") and (przestrzen..":") or "") or "")..parametr;
return parametr;
end;
p["Powtarzaj"] = function(frame)
local pf=frame:getParent();
local parametry_modul=require("Moduł:Parametry");
local czy_parametry=parametry_modul.CzyTak(frame.args["parametry"]);
local tabela={};
local zacznij_nazwane;
local parametry_modul=require("Module:Parametry");
if(czy_parametry)then
local iter=mw.text.gsplit(mw.text.trim(frame.args["parametry"]),"%s*;%s*",false);
local czy=true;
for znaczenia in iter do
znaczenia=mw.text.trim(znaczenia);
local czy_omijac=parametry_modul.CzyTak(znaczenia);
if(czy_omijac)then
if(czy)then
zacznij_nazwane=tonumber(znaczenia);
czy=false;
if(not zacznij_nazwane)then
local tab1,tab2=mw.ustring.match(znaczenia,"%s*([%w%s]+)%s*=%s*(.*)%s*$");
if(tab1 and tab2)then
local parametr_tab=mw.text.split(tab2,"%s*,%s*",false);
tabela[parametry_modul["Odstępy"]{[1]=tab1,[2]="tak",}]=parametr_tab;
else
tabela[parametry_modul["Odstępy"]{[1]=znaczenia,[2]="tak",}]={};
end;
zacznij_nazwane=0;
end;
else
local tab1,tab2=mw.ustring.match(znaczenia,"%s*([%w%s]+)%s*=%s*(.*)%s*$");
if(tab1 and tab2)then
local parametr_tab=mw.text.split(tab2,"%s*,%s*",false);
tabela[parametry_modul["Odstępy"]{[1]=tab1,[2]="tak",}]=parametr_tab;
else
tabela[parametry_modul["Odstępy"]{[1]=znaczenia,[2]="tak",}]={};
end;
end;
end;
end;
end;
local tabela_dodatkowe={};
local czy_dodatkowe=parametry_modul.CzyTak(frame.args["dodatkowe"]);
if(czy_dodatkowe)then
local iter=mw.text.gsplit(mw.text.trim(frame.args["dodatkowe"]),"%s*;%s*",false);
for name in iter do
tabela_dodatkowe[name]=true;
end;
end;
if(not zacznij_nazwane)then zacznij_nazwane=0;end;
function LiczbaZmiennychOOgolniePodstawieParametru(podstawa_parametru_wyszukiwana)
local args=pf.args;
local maksymalna_liczba_nazwy_danego_parametru=0;
for nazwa_parametru, wartosc_parametru in pairs(args)do
local czy_jedynka=false;
if(type(nazwa_parametru)=="string")then
local nazwa_podstawy_parametru,spacja,liczba=mw.ustring.match(nazwa_parametru,"^([%a%s]*%a)(%s?)(%d+)$");
if(not nazwa_podstawy_parametru and not spacja and not liczba)then
nazwa_podstawy_parametru=nazwa_parametru;
spacja="";
liczba=1;
czy_jedynka=true;
end;
local subtab=tabela[nazwa_podstawy_parametru];
if(subtab)then
local nie_spacja_parametru=parametry_modul.CzyTak(subtab[1]);
local czy_z_jedynka=parametry_modul.CzyTak(subtab[2]);
liczba=tonumber(liczba) or 0;
if((not nie_spacja_parametru and (((spacja==" ")and ((liczba>1)or((not czy_jedynka)and(czy_z_jedynka))or((not czy_z_jedynka)and(not czy_jedynka)))) or(((not czy_z_jedynka)and(czy_jedynka))and(spacja=="" and liczba==1))))
or (nie_spacja_parametru and (((spacja=="")and ((liczba>1)or((not czy_jedynka)and(czy_z_jedynka))or((not czy_z_jedynka)and(not czy_jedynka)))) or(((not czy_z_jedynka)and(czy_jedynka))and(spacja=="" and liczba==1))))
)then
if(((podstawa_parametru_wyszukiwana) and (nazwa_podstawy_parametru==podstawa_parametru_wyszukiwana))or(not podstawa_parametru_wyszukiwana))then
maksymalna_liczba_nazwy_danego_parametru=math.max(maksymalna_liczba_nazwy_danego_parametru,liczba);
end;
end;
end;
end;
end;
return maksymalna_liczba_nazwy_danego_parametru;
end;
local MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow=function()
local maksimum=0;
for wartosc_parametru,_ in pairs(tabela)do
if(type(wartosc_parametru)=="string")then
if(not tabela_dodatkowe[wartosc_parametru])then
local maksymalna_liczba_nazwy_danego_parametru=LiczbaZmiennychOOgolniePodstawieParametru(wartosc_parametru);
maksimum=tabela[wartosc_parametru]
and math.max(maksimum,maksymalna_liczba_nazwy_danego_parametru-(tonumber(tabela[wartosc_parametru][3]) or 0))
or (tonumber(maksymalna_liczba_nazwy_danego_parametru) or 0);
end;
end;
end;
maksimum=math.max(maksimum-zacznij_nazwane,0);
return maksimum;
end;
local zacznij_na_poczatku,skoncz_na_koncu;
local tekst_do_analizy=frame.args[1];
if(not frame.args[1])then return "(brak parametru do analizy)";end;
local czy_tekst=parametry_modul.CzyTak(tekst_do_analizy);
if(not czy_tekst)then return "(parametr do analizy pusty)";end;
local czy_start=parametry_modul.CzyTak(frame.args["start"]);
local czy_koniec=parametry_modul.CzyTak(frame.args["koniec"]);
local zaznacz=frame.args["zaznacz"];
local tabela_zaznacz={};
if(zaznacz)then
local iter=mw.text.gsplit(zaznacz,"%s*;%s*",false)
for liczba in iter do
tabela_zaznacz[#tabela_zaznacz+1]=tonumber(liczba) or 0;
end;
end;
local czy_rozne=parametry_modul.CzyTak(frame.args["różne"]);
local czy_ma_nazwane;
local function Wylicz_skoncz_na_koncu()
czy_ma_nazwane=parametry_modul["CzySąElementyNazwaneTablicy"](tabela);
if(czy_ma_nazwane)then
if(czy_rozne)then
local maks_numer=parametry_modul.CzyTak(frame.args["maksimum numeracyjne"]);
if(not maks_numer)then
return math.max(MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow(),parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args));
else
return parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args);
end;
else
return MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow();
end;
else
return parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args);
end;
end;
local skoncz_na_koncu_wyliczona=Wylicz_skoncz_na_koncu();
if(not czy_koniec)then
skoncz_na_koncu=skoncz_na_koncu_wyliczona;
else
skoncz_na_koncu=math.min(skoncz_na_koncu_wyliczona, tonumber(frame.args["koniec"]) or 0);
end;
zacznij_na_poczatku=tonumber(frame.args["start"]) or 1;
if(zacznij_na_poczatku==0)then return "(początek jest ustawiony na zero)";end;
for name, tab_par in pairs(tabela)do
local _4=tonumber(tab_par[4]);local _5=tonumber(tab_par[5]);
if(_4)then zacznij_na_poczatku=math.min(zacznij_na_poczatku,_4 or 0);end;
if(_5)then skoncz_na_koncu=math.max(skoncz_na_koncu,_5 or 0);end;
end;
local lancuch_znakow="";
local gdy_nic=parametry_modul.CzyTak(frame.args["nic"])and frame.args["nic"] or "";
if(zacznij_na_poczatku>skoncz_na_koncu)then return gdy_nic;end;
local pokolei=parametry_modul.CzyTak(frame.args["po kolei"]);
local wytnij=parametry_modul.CzyTak(frame.args["wytnij"]);
local wytnij_puste=parametry_modul.CzyTak(frame.args["wytnij puste"]);
local nie_wytnij_nazwane=parametry_modul.CzyTak(frame.args["nie wytnij nazwane"]);
local _i=parametry_modul.CzyTak(frame.args["znacznik"])and frame.args["znacznik"] or "_";
local czy_parametry_ze_spacja_i_jedynka=function(nazwa_parametru)
local value=tabela[nazwa_parametru];
if(value)then
return not parametry_modul.CzyTak(value[1]),parametry_modul.CzyTak(value[2]);
end;
return true,false;
end;
if(not czy_rozne)then
if(czy_ma_nazwane)then
local function Analizuj_dla_bez_rozne(tabela_wszystkich_parametrow)
local tab_lancuch={};
local maksimum=0;
local minimum;
for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
local lancuch=tekst_do_analizy;
local czy=nil;
for zmienne_parametrowe,_ in pairs(tabela_wszystkich_parametrow)do
if(zmienne_parametrowe)then
local ze_spacja,czy_z_jedynka=czy_parametry_ze_spacja_i_jedynka(zmienne_parametrowe);
local element=pf.args[zmienne_parametrowe..((ze_spacja)and " " or "")..licznik];
local czy_jedynka=(licznik==1)and ((element and(not wytnij)) or((wytnij)and (parametry_modul.CzyTak(element))));
local wartosc_elementu=((czy_z_jedynka) and element or ((not czy_z_jedynka)and((licznik>1)and element or ((licznik==1)and(czy_jedynka and element or pf.args[zmienne_parametrowe])))));
czy=czy or (((wartosc_elementu) and ((not wytnij)and(not wytnij_puste)))
or ((wytnij)and (parametry_modul["CzyTakCiąg"](wartosc_elementu)))
or ((wytnij_puste and not wytnij)and (parametry_modul.CzyTak(wartosc_elementu))));
local tabelka_szablonow={
["{{".._i.."}}"]=licznik,
["{{".._i.._i.."}}"]=(czy_z_jedynka and licznik or ((licznik>1) and licznik or (czy_jedynka and 1 or ""))),
};
local function fun_tabelka_szablonow(ciag)
local ciag_strip=mw.ustring.gsub(ciag,"{{%s*(%S+)%s*}}","{{%1}}");
return tabelka_szablonow[ciag_strip] or ciag;
end;
lancuch=mw.ustring.gsub(lancuch,"{{%s*".._i.."+%s*}}",fun_tabelka_szablonow);
end;
end;
local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
if((pokolei and (not czy_jest)) or czy or ((not pokolei)and(czy_jest))) then
tab_lancuch[#tab_lancuch+1]=lancuch;
maksimum=math.max(maksimum,licznik);
minimum=math.min(minimum or licznik,licznik);
end;
end
lancuch_znakow=Skladaj_lancuch(frame,tab_lancuch,minimum or 0,maksimum);
end;
Analizuj_dla_bez_rozne(tabela);
else
local tab_lancuch={};
local maksimum=0;
local minimum;
for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
local element=pf.args[licznik]
local czy=(((element)and ((not wytnij)and(not wytnij_puste)))
or((wytnij)and(parametry_modul["CzyTakCiąg"](element)))
or((wytnij_puste and not wytnij)and(parametry_modul.CzyTak(element))));
local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
if((pokolei and (not czy_jest)) or czy or ((not pokolei)and(czy_jest)))then
tab_lancuch[#tab_lancuch+1]=mw.ustring.gsub(tekst_do_analizy,"{{%s*".._i.."+%s*}}",licznik);
maksimum=math.max(maksimum,licznik);
minimum=math.min(minimum or licznik,licznik);
end;
end;
lancuch_znakow=Skladaj_lancuch(frame, tab_lancuch,minimum or 0,maksimum);
end;
else
local function Analizuj_z_rozne(tabela_wszystkich_parametrow)
local tab_lancuch={};
local maksimum=0;
local minimum;
for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
local czy=false;
local czy_niepuste=false;
local wytnij_ujemne=false;
local function Analiza_zmiennej_parametrowej(zmienne_parametrowe,licznik,czy_ze_spacja,czy_z_jedynka)
local wartosc,klucz;
if(zmienne_parametrowe)then
local function Niewspomniane_w_rozne(zmienne_parametrowe,liczba_przesuniecia)
local liczba=licznik+liczba_przesuniecia+zacznij_nazwane;
if(liczba<1)then wytnij_ujemne=true;end;
if(liczba>0)then
local element=pf.args[zmienne_parametrowe..((czy_ze_spacja)and " " or "")..liczba];
local czy_jedynka=(liczba==1)and element;
local wartosc_elementu=((czy_z_jedynka) and element or ((not czy_z_jedynka)and((liczba>1)and element or ((liczba==1)and(czy_jedynka and element or pf.args[zmienne_parametrowe])))));
czy_niepuste=czy_niepuste
or ((not nie_wytnij_nazwane)and((wytnij and parametry_modul["CzyTakCiąg"](wartosc_elementu))
or (wytnij_puste and not wytnij and parametry_modul.CzyTak(wartosc_elementu))) or (nie_wytnij_nazwane and wartosc_elementu));
czy=czy or wartosc_elementu;
wartosc="{{{"..zmienne_parametrowe..(czy_z_jedynka and (((czy_ze_spacja)and " " or "")..liczba) or ((liczba>1) and (((czy_ze_spacja)and " " or "")..liczba) or (czy_jedynka and (((czy_ze_spacja)and " " or "")..1) or "")));
klucz="{{{%s*"..zmienne_parametrowe..((czy_ze_spacja)and "%s+" or "").."{{%s*".._i.._i.."+%s*}}";
end;
end;
local subtab=tabela[zmienne_parametrowe];
local czy_w_tabeli=subtab and tonumber(subtab[3]);
local liczba_przesuniecia=(czy_w_tabeli)and czy_w_tabeli or 0;
Niewspomniane_w_rozne(zmienne_parametrowe,liczba_przesuniecia);
end;
return klucz,wartosc;
end;
local function Tekst_do_analizy(tekst_do_analizy_przetwarzany,klucz,wartosc)
if((wartosc)and(klucz))then
local przetwarzane,_=mw.ustring.gsub(tekst_do_analizy_przetwarzany,klucz,wartosc);
return przetwarzane;
end;
return "";
end;
local lancuch_zaanalizowany=tekst_do_analizy;
for zmienne_parametrowe,_ in pairs(tabela_wszystkich_parametrow)do
local lokalizacja=mw.ustring.match(tekst_do_analizy,"{{{%s*"..zmienne_parametrowe.."%s*{{%s*".._i.._i.."+%s*}}");
if(lokalizacja)then
zmienne_parametrowe=mw.text.trim(zmienne_parametrowe);
local czy_ze_spacja,czy_z_jedynka=czy_parametry_ze_spacja_i_jedynka(zmienne_parametrowe);
local klucz,wartosc=Analiza_zmiennej_parametrowej(zmienne_parametrowe,licznik,czy_ze_spacja,czy_z_jedynka);
if(wytnij_ujemne)then break;end;
lancuch_zaanalizowany=Tekst_do_analizy(lancuch_zaanalizowany,klucz,wartosc);
end;
end;
if(not wytnij_ujemne)then
local zmienna_numerowana_wikikodu=mw.ustring.match(tekst_do_analizy,"{{{%s*{{%s*".._i.."+%s*}}");
czy=czy or ((not zmienna_numerowana_wikikodu)and(mw.ustring.match(tekst_do_analizy,"{{%s*".._i.."%s*}}")))or((zmienna_numerowana_wikikodu)and(pf.args[licznik]));
local klucz="{{%s*".._i.."%s*}}";
local wartosc=licznik;
lancuch_zaanalizowany=Tekst_do_analizy(lancuch_zaanalizowany,klucz,wartosc);
czy_niepuste=czy_niepuste
or (wytnij and parametry_modul["CzyTakCiąg"](pf.args[licznik]))
or (wytnij_puste and not wytnij and parametry_modul.CzyTak(pf.args[licznik]));
local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
if((pokolei and (not czy_jest)) or (czy and (not wytnij)and(not wytnij_puste)) or (((wytnij)or(wytnij_puste))and(czy_niepuste)) or ((not pokolei)and(czy_jest)))then
tab_lancuch[#tab_lancuch+1]=lancuch_zaanalizowany;
maksimum=math.max(maksimum,licznik);
minimum=math.min(minimum or licznik,licznik);
end;
end;
end;
lancuch_znakow=Skladaj_lancuch(frame,tab_lancuch,minimum or 0,maksimum);
end;
Analizuj_z_rozne(tabela);
end;
if(#lancuch_znakow==0)then return gdy_nic;end;
local przetworzony_wikikod=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch_znakow) or lancuch_znakow;
return przetworzony_wikikod;
end;
p["PowtarzajOdDo"]=function(frame)
local start=tonumber(frame.args["start"]);
local koniec=tonumber(frame.args["koniec"]);
local krok=tonumber(frame.args["krok"]) or 1;
local parametry_modul=require("Module:Parametry")
local lacznik=frame.args["łącznik"] or (parametry_modul.CzyTak(frame.args["nowa linia"]) and "\n" or "");
if((not start)or(not koniec))then return "";end;
if(krok==0)then return "";end;
if(((start>koniec)and(krok>0))or((start<koniec)and(krok<0)))then return "";end;
local kod=frame.args[1];
tabela_mikroszablonow={
["{{start}}"]=start,
["{{koniec}}"]=koniec,
["{{krok}}"]=krok,
}
kod=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_mikroszablonow);
local lancuch="";
local licznik=start;
local kodprzeskok=frame.args["przeskok"];
local pf=frame:getParent();
while licznik<=koniec do
local przeskok;
if(kodprzeskok)then
local _;
przeskok,_=mw.ustring.gsub(kodprzeskok,"{{_}}",licznik);
przeskok=pf:preprocess(przeskok);
end;
local kod2,_=mw.ustring.gsub(kod,"{{_}}",licznik);
lancuch=lancuch..((lancuch~="")and lacznik or "")..kod2;
licznik=licznik+krok+(tonumber(przeskok) or 0);
end;
local przetworzony_wikikod=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch) or lancuch;
return przetworzony_wikikod;
end;
p["PrzetwarzajIterującCiąg"]=function(frame)
local poziom=frame.args["ciąg"];
poziom=mw.text.trim(poziom);
local tab_poziom=mw.text.split(poziom,"%s*;%s*",false);
local len_tab_poziom=#tab_poziom;
local start=1;local koniec=len_tab_poziom;local krok=1;
tabela_mikroszablonow={
["{{start}}"]=start,
["{{koniec}}"]=koniec,
["{{krok}}"]=krok,
}
local parametry_modul=require("Module:Parametry");
local lacznik=frame.args["łącznik"] or (parametry_modul.CzyTak(frame.args["nowa linia"]) and "\n" or "");
local kod=frame.args[1];
kod=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_mikroszablonow);
local lancuch="";
local licznik=start;
local kodprzeskok=frame.args["przeskok"];
local pf=frame:getParent();
while licznik<=koniec do
local przeskok;
if(kodprzeskok)then
local _;
przeskok,_=mw.ustring.gsub(kodprzeskok,"{{_}}",licznik);
przeskok=pf:preprocess(przeskok);
end;
local tabela_microszablonow2={
["{{_}}"]=licznik,
["{{ciąg}}"]=tab_poziom[licznik];
};
local kod2,_=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_microszablonow2);
lancuch=lancuch..((lancuch~="")and lacznik or "")..kod2;
licznik=licznik+krok+(tonumber(przeskok) or 0);
end;
local przetworzony_wikikod=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch) or lancuch;
return przetworzony_wikikod;
end;
p["PowtarzajWedług"] = function(frame)
local wybrany_wzor=frame.args["wzór"];
local parametry_modul=require("Module:Parametry")
local czy_link=parametry_modul.CzyTak(frame.args["link"]);
local liczba_list=p["MaksymalnaLiczbaNumerowanychIstniejącychStronWedługWzoru"]{args={["wzór"]=wybrany_wzor,}};
local lancuch="";
local linki_modul=require("Module:S");
for i=1,liczba_list,1 do
local wybrany_link_lub_bez;
local wybrany_link_lub_bez=mw.ustring.gsub(wybrany_wzor,"{{_}}",tostring(i));
if czy_link then
wybrany_link_lub_bez=linki_modul["S"]{[1]=wybrany_link_lub_bez};
end;
lancuch=(lancuch~="")and (lancuch..((i<liczba_list) and ", " or " i ")..wybrany_link_lub_bez) or wybrany_link_lub_bez;
end;
return lancuch;
end;
p["LiczbaPrawychUkośników"] = function(frame)
local nazwa=frame.args[1];
local _,ile=mw.ustring.gsub(nazwa,"/",function(s)return nil;end);
return ile;
end;
p["MaksymalnaLiczbaNumerowanychIstniejącychStronWedługWzoru"] = function(frame)
local start=tonumber(frame.args["start"]) or 1;
licznik=start;
local strona=frame.args["wzór"];
while true do
local strona2,_=mw.ustring.gsub(strona,"{{_}}",licznik);
local title=mw.title.makeTitle('',strona2);
if((not title) or (not title.exists))then
return licznik-1;
end;
licznik=licznik+1;
end;
end;
p["MinimalnyNumerSpośródNieodpowiednikowychZmiennych"]=function(frame)
local parametry_modul=require("Module:Parametry");
local techniczne_modul=require("Module:Techniczne");
local pf=frame:getParent();
local parametr=frame.args["zmienna"];
local odpowiednik=frame.args["odpowiednik"];
parametr=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](parametr);
local czy_odpowiednik=parametry_modul.CzyTak(odpowiednik);
local numer=nil;
for name,value in pairs(pf.args)do
local __name=tostring(name);
local __numer=mw.ustring.match(__name,"^"..parametr.."(%d*)$");
__numer=tonumber(__numer) or (((__numer)and(__numer=="")) and 1 or nil);
if((__numer)or((czy_odpowiednik)and(parametry_modul.TypeNumber(name))))then
if(numer)then
numer=math.min(__numer or name,numer);
else
numer=__numer or name;
end;
end;
end;
return numer;
end;
p["IleJestTakichNieodpowiednikowychZmiennych"]=function(frame)
local parametry_modul=require("Module:Parametry");
local techniczne_modul=require("Module:Techniczne");
local pf=frame:getParent();
local parametr=frame.args["zmienna"];
local odpowiednik=frame.args["odpowiednik"];
parametr=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](parametr);
local czy_odpowiednik=parametry_modul.CzyTak(odpowiednik);
local numer=0;
local tab={};
for name,value in pairs(pf.args)do
local __name=tostring(name);
local __numer=mw.ustring.match(__name,"^"..parametr.."(%d*)$");
if((not tab[name])and((__numer)or((czy_odpowiednik)and(parametry_modul.TypeNumber(name)))))then
numer=numer+1;
tab[tonumber(__numer) or(((__numer)and(__numer==""))and 1 or nil) or name]=true;
end;
end;
return numer;
end;
p["Parametr w tablicy nazw"]=function(frame)
local zmienna_z_argumentami=frame.args["parametry"];
if(not zmienna_z_argumentami)then return;end;
local jedna_pozycja=frame.args["pozycja"];
if(not jedna_pozycja)then return;end;
local parametry_modul=require("Module:Parametry");
jedna_pozycja=parametry_modul["Odstępy"]{[1]=jedna_pozycja,[2]="tak"};
if(jedna_pozycja=="")then return;end;
local od_duzej=paramwetry_modul.CzyTak(frame.args["od dużej"]);
jedna_pozycja=od_duzej and mw.getContentLanguage():ucfirst(jedna_pozycja) or jedna_pozycja;
local iter=mw.text.gsplit(zmienna_z_argumentami,";",true);
local tablica={};
for pozycja in iter do
pozycja=parametry_modul["Odstępy"]{[1]=pozycja,[2]="tak"};
if(pozycja~="")then
tablica[od_duzej and mw.getContentLanguage():ucfirst(pozycja) or pozycja]=true;
end;
end;
return (tablica[jedna_pozycja] and "tak" or nil);
end;
return p;