Moduł:StronicowyParser

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
local p = {}
function NazwaStronyGlownej()
   local s=mw.loadData("Module:StronicowyParser/data2");
   local title=mw.title.getCurrentTitle();
   local tablist=mw.loadData("Moduł:StronicowyParser/data").c;
   local nazwa_modolu=tablist.nazwa_modolu;
   if((title.nsText==s.main)or(title.nsText==s.wikijunior)or(title.nsText==s.user))then
	   return mw.getCurrentFrame():expandTemplate{title="PEŁNANAZWAKSIĄŻKI",args={nazwa_modolu}};
   else
   	    return nil;
   end;
end;
p["NastępnyArtykuł"]=function(frame)
  local ks=NazwaStronyGlownej();
  if(not ks)then return "(błąd)";end;
  local tablist=mw.loadData("Moduł:StronicowyParser/data").c;
  local list=tablist.list[ks];
  if(not list)then
  	return "(błąd)";
  end;
  local len=require("Module:Parametry").NumberOfElementsInAnArray(list);
  if(len==0)then
  	return "(błąd)";
  end;
  local tablist=mw.loadData("Moduł:StronicowyParser/data").c;
  local nazwa_modolu=tablist.nazwa_modolu;
  for i=1,len,1 do
  	if(ks.."/"..list[i]==nazwa_modolu)then
  		if(i<len)then 
  		    return list[i+1];
  		elseif(i==len)then
  			return "";
  		end;
  	end;
  end;
  return "(błąd)";
end;
p["PoprzedniArtykuł"]=function(frame)
  local ks=NazwaStronyGlownej();
  if(not ks)then return "(błąd)";end;
  local tablist=mw.loadData("Moduł:StronicowyParser/data").c;
  local list=tablist.list[ks];
  if(not list)then
  	  return "(błąd)";
  end;
  local len=require("Module:Parametry").NumberOfElementsInAnArray(list);
  if(len==0)then
  	return "(błąd)";
  end;
  local tablist=mw.loadData("Moduł:StronicowyParser/data").c;
  local nazwa_modolu=tablist.nazwa_modolu;
  for i=1,len,1 do
  	if(ks.."/"..list[i]==nazwa_modolu)then
  		if(i>1)then 
  			return list[i-1];
  		elseif(i==1)then
  			return "";
  		end;
  	end;
  end;
  return "(błąd)";
end;
p["AktualnaKsiążka"]=function(frame)
  local nazwa_strony_glownej=NazwaStronyGlownej();
  if(not nazwa_strony_glownej)then
  	  return "(błąd)";
  end;
  return nazwa_strony_glownej;
end;
function p.HLiczba(frame)
	local i=1;
	while true do
    	local str=mw.ustring.match(frame.args[1],"^\n"..mw.ustring.rep("=",i).."%s*([^\n]+)%s*"..mw.ustring.rep("=",i).."%s*\n$");
    	if(mw.ustring.match(str,"^=([^\n]+)=$")~=nil)then
    		i=i+1;
    	else
    		if(i>6)then 
       			return 6;
    		elseif(i<1)then
       			return nil;
    		else
       			return i;
    		end;
    	end;
	end;
end;
function p.NazwaRozdzialu(frame)
	local i=1;
	while true do
    	local str=mw.ustring.match(frame.args[1],"^\n"..mw.ustring.rep("=",i).."%s*([^\n]+)%s*"..mw.ustring.rep("=",i).."%s*\n$");
    	if(mw.ustring.match(str,"^=([^\n]+)=$")~=nil)then
    		i=i+1;
    	else
    		return str;
    	end;
	end;
end;
function p.TOC()
    local d=mw.loadData('Moduł:StronicowyParser/data');
    local nazwa_modolu=d.c.nazwa_modolu;
    if(nazwa_modolu~=nil)then
       local spis=TOC(d.c.TOC[nazwa_modolu]);
       return spis;
    else 
    	return nil;
    end;
end;
function p.WykazModolow()
    local d=mw.loadData('Moduł:StronicowyParser/data');
	local nazwa_modolu=d.c.nazwa_modolu;
	if(nazwa_modolu==nil)then return nil;end;
	local title=mw.title.makeTitle('',nazwa_modolu);
	local nazwa_ksiazka;
    local s=mw.loadData("Module:StronicowyParser/data2");
    if((title.nsText==s.main)or(title.nsText==s.wikijunior))then
    	nazwa_ksiazka=title.rootText;
   	elseif(title.nsText==s.user)then 
    	nazwa_ksiazka=mw.ustring.match(nazwa_modolu,"^([^/:]+:[^/]+/[^/]+).-$");
    else return nil;
    end;
	nazwa_ksiazka=mw.ustring.gsub(nazwa_ksiazka,"_"," ");
	local list=d.c.list[nazwa_ksiazka];
	if(list==nil)then return nil;end;
	local str='<ol>';
	for nazwa, value in pairs(list) do
		local modol=list[nazwa];
		_modol=mw.ustring.gsub(modol,"_"," ");
		str=str..'<li>[['..nazwa_ksiazka.."/"..modol..'|'.._modol..']]</li>';
	end;
	str=str.."</ol>";
	str='<div style="width:100%;max-height:400px;overflow:auto;">'..str.."</div>";
	str='{{Menu|StylMenu=width:100%|Tytuł=<div style="text-align:left;font-size:1.1em;">Wykaz modułów w książce</div>|Pozycje='..str..'|Funkcja=UkrytaRamkowaListaMenu|Klasy=inkremlicztoc listtoc}}';
	local frame=mw.getCurrentFrame();
    local d=frame:preprocess(str);
	return d;
end;
function p.NazwaModolu()
	local d=mw.loadData('Moduł:StronicowyParser/data');
	local s=mw.loadData('Moduł:StronicowyParser/data2');
	local nazwa_modolu=d.c.nazwa_modolu;
	if(nazwa_modolu==nil)then 
		 return "[["..s.category..": Nie można wygenerować nazwy strony]]";
     else
	    local str=mw.ustring.gsub(mw.ustring.match(nazwa_modolu,"[^/]*$"),"_"," ");
	     return str;
	end;
end;
function p.Wstep_do_licencji(frame)
	  local str1='<strong>Autor:</strong> '..frame.args[1]..'<BR>';
	  local str2;
	    if((frame.args[2]~='')and(frame.args[2]~=nil))then 
	    	str2=frame.args[2]..'<BR>';
	  end;
	  local str3; 
	  if((frame.args[3]~='')and(frame.args[3]~=nil))then 
	  	 str3='<strong>Email:</strong> '..frame.args[3]..'<BR>';
	  end;
	  local str4;
	  if((frame.args[4]~='')and(frame.args[4]~=nil))then 
	  	  str4='<strong>Dotyczy:</strong> '..frame.args[4].."<BR>";
	  else
	  	 str4='<strong>Dotyczy:</strong> książki, do której należy ta strona, oraz w niej zawartych stron i w nich podstron, a także w nich kolumn, wraz z zawartościami.<BR>';
	  end;
	   if((frame.args[5]~='')and(frame.args[5]~=nil))then 
	  	  str5=frame.args[5].."<BR>";
	  else
	  	 str5='Użytkownika książki, do której należy ta strona, oraz w niej zawartych stron i w nich podstron, a także w nich kolumn, wraz z zawartościami nie zwalnia z odpowiedzialności prawnoautorskiej nieprzeczytanie warunków licencjonowania.<BR>';
	  end;
	  local str6;
	  if((frame.args[6]~='')and(frame.args[6]~=nil))then 
	  	   str6='<strong>Umowa prawna:</strong> '..frame.args[6]..'<BR>'; 
	  else 
	  	   str6='<strong>Umowa prawna:</strong> [http://creativecommons.org/licenses/by-sa/3.0/deed.pl Creative Commons: uznanie autorstwa oraz miejsca pochodzenia książki i jej jakikolwiek części, a także treści, teksty, tabele, wykresy, rysunki, wzory i inne elementy oraz ich części zawarte w książce, i tą książkę, nawet w postaci przerobionej nie można umieszczać w jakikolwiek formie na czasopismach naukowych, archiwach prac, itp.]<BR>';
	  end;	  
	  if((frame.args[7]~='')and(frame.args[7]~=nil))then 
	  	  str7=frame.args[7].."<BR>";
	  else
	  	 str7='Autor tej książki dołożył wszelką staranność, aby informacje zawarte w książce były poprawne i najwyższej jakości, jednakże nie udzielana jest żadna gwarancja, czy też rękojma. Autor nie jest odpowiedzialny za wykorzystanie informacji zawarte w książce nawet jeśli wywołaby jakąś szkodę, straty w zyskach, zastoju w prowadzeniu firmy, przedsiębiorstwa lub spółki bądź utraty informacji niezależnie, czy autor (a nawet [https://pl.wikibooks.org Wikibooks]) został powiadomiony o możliwości wystąpienie szkód. Informacje zawarte w książce mogą być wykorzystane tylko na własną odpowiedzialność.<BR>';
	  end;
	  local str=str1..((str2)and str2 or "")..((str3)and str3 or "")..str4..str5..str6..str7;
	  return str; 
end;
function p.Licencja()
  local d=mw.loadData('Moduł:StronicowyParser/data');
  if(d.c.lic)then
	if(d.c.lic[1])then
		local frame={};
		frame.args={d.c.lic[1],d.c.lic[2],d.c.lic[3],d.c.lic[4],d.c.lic[5],d.c.lic[6],d.c.lic[7]};
		local strw='<div style="margin-left:0px;padding:3px;">'..p.Wstep_do_licencji(frame)..'</div>';
		str='{{Menu|StylMenu=width:100%;|Tytuł=<div style="font-size:1.1em;text-align:left;">Licencja</div>|Pozycje='..strw..'|Funkcja=StatycznaRamkowaListaMenu}}';
	else
		return nil;
	end; 
	local frame1=mw.getCurrentFrame();
    local d=frame1:preprocess(str);
    return d;
  else
    return nil;
  end;
end;
function p.PierwszaStrona(frame)
	local wstep="";
	if(frame.args[1]=="NAZWA MODUŁU")then 
		wstep='<div style="margin-top:5px;font-size:1.9em;line-height:25px;text-align:left;">'..p.NazwaModolu()..'</div><hr/>';
    end;
	if(frame.args[2]=="LICENCJA")then 
		 local str=p.Licencja();
		 if(str~=nil)then
		 	wstep=wstep..str;
		 else
    		local s=mw.loadData("Module:StronicowyParser/data2");
  	    	local title=mw.title.getCurrentTitle();
  	    	local art=(title.nsText==s.main)and "w artykułach głównych, książek" 
  	    	            or ((title.nsText==s.wikijunior)and "w artykułach głównych, książek dla dzieci" 
  	    	            	 or ((title.nsText==s.user)and "na stronach głównych, książek użytkowników" or "na stronach głównych, książek"));
    		local str= "[["..s.category..": Brak licencji, "..art.."]]";
    		wstep=wstep..str;
	   end;
	end;
	if(frame.args[3]=="WYKAZ")then 
		 local str1=p.WykazModolow();
		 if(str1~=nil)then
		 	wstep=wstep.."<hr/>"..str1;
	    end;
	end;
	if(frame.args[4]=="TOC")then 
		 local str2=p.TOC();
		 if(str2~=nil)then
		 	wstep=wstep.."<hr/>"..str2;
	    end;
	end;
	return wstep;
end;
function TOC(h)
        if(h==nil)then return nil;end;
        local znacz="";
        local d=h[1][2];
        for c, value in ipairs(h) do
        	if(c==1)then
                   znacz='<ol><li>'.."[["..h[c][1][1].."|"..h[c][1][2].."]]";
                else
                  if(h[c][2]==d)then
                       znacz=znacz..'</li><li>'.."[["..h[c][1][1].."|"..h[c][1][2].."]]";
                  elseif(h[c][2]>d)then
                      znacz=znacz..'<ol><li>'.."[["..h[c][1][1].."|"..h[c][1][2].."]]";
                      d=h[c][2];
                  elseif(h[c][2]<d)then
                       znacz=znacz..mw.ustring.rep('</li></ol>',d-h[c][2])..'</li><li>'.."[["..h[c][1][1].."|"..h[c][1][2].."]]";
                       d=h[c][2];
                  end;
               end;	
        end;
        znacz=znacz..mw.ustring.rep('</li></ol>',d);
        znacz='<div style="width:100%;max-height:700px;overflow:auto;padding-right:5px;">'..znacz.."</div>";
        str='{{Menu|StylMenu=width:100%|Tytuł=<div style="text-align:left;font-size:1.1em;">Spis Treści</div>|Pozycje='..znacz..'|Funkcja=UkrytaRamkowaListaMenu|Klasy=inkremlicztoc listtoc}}';
	    local frame=mw.getCurrentFrame();
        local d=frame:preprocess(str);
	    return d;
end;
function p.SpisTresci(frame)
    local args = frame.args;
    local brak=mw.ustring.match(args[1],"[|<>{}%[%]]");
    local title=mw.title.getCurrentTitle();
    if(brak~=nil)then
    	local s=mw.loadData("Module:StronicowyParser/data2");
  	    local art=(title.nsText==s.main)and "artykułów," or ((title.nsText==s.wikijunior)and "artykułów dla dzieci," 
  	    	        or ((title.nsText==s.user)and "stron użytkowników," or "stron,"));
    	return "[["..s.category..":Nazwy "..art.." w spisach treści, zawierają niedozwolone znaki]]";
    end;
    local ks=mw.getCurrentFrame():expandTemplate{title="PEŁNANAZWAKSIĄŻKI",args={title.fullText}};
    args[1]=require("Module:Parametry").transform(args[1]);
    ks=require("Module:Parametry").transform(ks);
    local page = mw.title.makeTitle('', ks.."/"..args[1]);
    local ns = page:inNamespace( 0 );
    local names=mw.ustring.gsub(mw.ustring.match(args[1],"[^/]*$"),"_"," ");
    if((page==nil)or(not page.exists))then
	    return mw.ustring.rep("=",6).."<span style=\"color:red\">[["..ks.."/"..args[1].."|"..names.."]]</span>"..mw.ustring.rep("=",6);
    else
       local text = page:getContent();
       local h=SpisTresciWstep(text, args[1]);	
       local znacz="";
	   znacz=mw.ustring.rep("=",6).."[["..ks.."/"..args[1].."|"..names.."]]"..mw.ustring.rep("=",6);
	   if(h~=nil)then
         for c=1, #h do
 	        znacz=znacz.."\n"..mw.ustring.rep("#",h[c][2]).."[["..ks.."/"..h[c][1][1].."|"..h[c][1][2].."]]";
         end;
       end;
       return znacz;
    end;
end;
function  SpisTresciWstep(text,strona)
    strona=mw.ustring.gsub(strona,"(|)",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end);
    local arg=nil;
    text=mw.ustring.gsub(text,"<[mM][aA][tT][hH]>.-</[mM][aA][tT][hH]>","");
    text=mw.ustring.gsub(text,"<[nN][oO][wW][iI][kK][iI]>.-</[nN][oO][wW][iI][kK][iI]>",""); 	
    text=mw.ustring.gsub(text,"(\n=+[^\n]+=+%s-\n)","\n%1\n");
    text=mw.ustring.gsub(text,"^(=+[^\n]+=+%s-\n)","\n%1\n");
    text=mw.ustring.gsub(text,"(\n=+[^\n]+=+%s-)$","\n%1\n");
    local znaczenia="";
    local dpocz=nil;
    local ostatnie=nil;
    local znaczenia1;    
    local tab={};
    local iter=mw.ustring.gmatch(text, "\n=+%s*[^\n]+%s*=+%s-\n");
    local link=nil;
    for znaczenia1 in iter do
           local i=1;
           local znaczenia2="";
          local s1,d1;
           while true do
                   local str=mw.ustring.match(znaczenia1,"^\n"..mw.ustring.rep("=",i).."%s*([^\n]+)%s*"..mw.ustring.rep("=",i).."%s*\n$");
                   if(mw.ustring.match(str,"^=([^\n]+)=$")~=nil)then
                     i=i+1;
                   else
                   	 znaczenia2=str;
                   	 break;
                   end;
          end;
             local na11=mw.ustring.match(znaczenia2,"%[%[[^{}|]+|([^{}|]+)%]%]");
             local na21=mw.ustring.match(znaczenia2,"%[%[([^{}|]+|[^{}|]+)%]%]");
             if((na11~=nil)and(na21~=nil))then 
             	   na11=mw.ustring.gsub(na11,"^:","");
             	   znaczenia2=mw.ustring.gsub(znaczenia2,"%[%["..na21.."%]%]",na11);
              end;
             local na12=mw.ustring.match(znaczenia2,"%[%[([^{}|]+)%]%]");
             if(na12~=nil)then 
             	  local na121=mw.ustring.gsub(na12,"^:","");
             	  znaczenia2=mw.ustring.gsub(znaczenia2,"%[%["..na12.."%]%]",na121);
             end;
             local nazwa=mw.ustring.gsub(znaczenia2,"<.->","");
             nazwa=mw.ustring.gsub(nazwa,"\'\'\'","");
             nazwa=mw.ustring.gsub(nazwa,"\'\'","");
             nazwa=mw.ustring.gsub(nazwa,"^[%s_]*","");
             nazwa=mw.ustring.gsub(nazwa,"[%s_]*$","");
             nazwa=mw.ustring.gsub(nazwa,"_"," ");
             nazwa=mw.ustring.gsub(nazwa,"|","&#"..tostring(mw.ustring.byte('|'))..";");
             local licznikb=1;
             local nazwa_p=mw.ustring.lower(nazwa);
             for c=1,#tab do
             	  if(tab[c][2]==1)then
             	  	if(licznikb==1)then
                       if(tab[c][1]==nazwa_p)then licznikb=licznikb+1;end;
                    else
                       if(tab[c][1]==nazwa_p.." "..tostring(licznikb))then licznikb=licznikb+1;end;
                    end;
                  else
                   if(licznikb==1)then
                  	 if(tab[c][1].." "..tostring(tab[c][2])==nazwa_p)then licznikb=licznikb+1;end;
                    else
                  	 if(tab[c][1].." "..tostring(tab[c][2])==nazwa_p.." "..tostring(licznikb))then licznikb=licznikb+1;end;
                   end;
                 end;
             end;
             for d=1, #tab do
                 if(licznikb>1)then
                 	if(tab[d][2]==1)then
                  	    if(tab[d][1]==nazwa_p.." "..tostring(licznikb))then licznikb=licznikb+1;end;
                  	else
                  		if(tab[d][1].." "..tostring(tab[d][2])==nazwa_p.." "..tostring(licznikb))then licznikb=licznikb+1;end;
                  	end;
                 end;
             end;
             local addres;
             if(licznikb==1)then
                 link={strona.."#"..nazwa,znaczenia2};
             else
                 link={strona.."#"..nazwa.."_"..licznikb,znaczenia2};
             end;
             if((dpocz==nil)or(dpocz>=i))then 
                  dpocz=i-1;
             elseif(ostatnie+1<i-dpocz)then
                   dpocz=i-ostatnie-1;
             end;
             ostatnie=i-dpocz;
             tab[#tab+1]={mw.ustring.lower(nazwa),licznikb};  
             if(arg==nil)then arg={};end;
             arg[#arg+1]={link,i-dpocz};
     end;
     return arg;
end;
function p.lista()
    local title=mw.title.getCurrentTitle();
    local d=mw.ustring.gsub(title.fullText,"_"," ");
    local tablist={};
    tablist.c={};
    tablist.d={};
    tablist.d["Wzór"]=nil;
    tablist.d["LinkWzór"]=nil;
    tablist.d["Rysunek"]=nil;
    tablist.d["LinkRysunek"]=nil;
    tablist.d["Obiekt"]=nil;
    tablist.d["LinkObiekt"]=nil;
    local data2=mw.loadData("Module:StronicowyParser/data2");
    for name,value in pairs(data2.wypowiedzi)do
    	local wypowiedz2=mw.ustring.match(value,"^(%w*%a+)%d*$")
    	tablist.d[wypowiedz2]=nil;
        tablist.d["Link"..wypowiedz2]=nil;
    end;
    tablist.TOC={};
    tablist.formatowanie=nil
    tablist.list={};
    tablist.strona_nie_istnieje=nil;
    tablist.brak_spisu_tresci_do_korzystanych_modolow=nil;
    tablist.brak_spisu_tresci_do_doloczanych_modolow=nil;
    tablist.nieprawidlowe_nazwy_korzystanej_strony=nil;
    tablist.nieprawidlowe_nazwy_strony_doloczanej_do_strony=nil;
    tablist.blad_wewnetrzny=nil;
    tablist.niedozwolone_znaki_spisie_tresci=nil;
    tablist.brak_uchwytu={};
    tablist.brak_uchwytu["Wzór"]=nil;
    tablist.brak_uchwytu["Rysunek"]=nil;
    tablist.brak_uchwytu["Patrz"]=nil;
    tablist.brak_uchwytu["ZobaczTeż"]=nil;
    tablist.brak_uchwytu["Obiekt"]=nil;
    tablist.doloczone_brak_spis=nil;
    tablist.korzystane_brak_spis=nil;
    tablist.kodkategorie=nil;
    tablist.puste_parametry={};
    tablist.puste_parametry["Wzór"]={}
    tablist.puste_parametry["Rysunek"]={};
    tablist.puste_parametry["Patrz"]={}
    tablist.puste_parametry["ZobaczTeż"]={};
    tablist.puste_parametry["Obiekt"]={};
    tablist.puste_parametry["Wzór"][1]=nil;
    tablist.puste_parametry["Wzór"][2]=nil
    tablist.puste_parametry["Patrz"][1]=nil;
    tablist.puste_parametry["Patrz"][2]=nil;
    tablist.puste_parametry["ZobaczTeż"][1]=nil;
    tablist.puste_parametry["ZobaczTeż"][2]=nil;
    tablist.puste_parametry["Rysunek"][1]=nil;
    tablist.puste_parametry["Rysunek"][2]=nil;
    tablist.puste_parametry["Obiekt"][1]=nil;
    tablist.puste_parametry["Obiekt"][2]=nil;
    for name,value in pairs(data2.wypowiedzi)do
    	local wypowiedz2=mw.ustring.match(value,"^(%w*%a+)%d*$")
    	tablist.puste_parametry[wypowiedz2]={};
    	tablist.puste_parametry[wypowiedz2][1]=nil;
    	tablist.puste_parametry[wypowiedz2][2]=nil;
    	tablist.brak_uchwytu[wypowiedz2]=nil;
    end;
    tablist.lic={};
    local tablist0=NumerWzoruIGrafiki2(tablist,d, true);
    if(tablist0)then
       NumerWzoruIGrafiki3(tablist);
    end;
    return tablist;
end;
function lista2(tablist,p,dec)
   local page = mw.title.makeTitle('', p);
   if((page==nil)or(not page.exists))then 
      return nil;
   end;
   local ns = page:inNamespace( 0 );
   local text = page:getContent();
   local iter=mw.ustring.gmatch(text,"{{[^{}]-}}");
   local znaczenia="";
   local tablist2=nil;
   local br=true;
   local tr=nil;
   local tr2=nil;
   for znaczenia in iter do
   	   local mat=mw.ustring.match(znaczenia,"^{{[Ss]pisTreści|%s*([^{}]-)%s*}}$");
   	   if(mat~=nil)then
   	   	 mat=require("Module:Parametry").transform(mat);
   	   	 local title=mw.title.makeTitle('',mat);
   	   	 mat=title.fullText;
   	   	 mat=mw.ustring.gsub(mat,"_"," ");
   	   	 local brak=mw.ustring.match(mat,"[|<>{}%[%]]");
   	   	 if(not brak)then
        	if(not tr)then tr={};end;
        	tr[#tr+1]=mat;
        else
        	if(not tablist.niedozwolone_znaki_spisie_tresci)then
        		tablist.niedozwolone_znaki_spisie_tresci=0;
        	end;
        end;
       elseif((dec)and(br))then
       	 local mat2=mw.ustring.match(znaczenia,"^{{[Ll]icencja|([^{}]-)}}$");
       	 if(mat2~=nil)then
       	   znaczenia=mw.ustring.gsub(znaczenia,"(%[%[[^|%[%]]-)(|)([^|%[%]]-%]%])","%1&#"..tostring(mw.ustring.byte('|'))..";%3");
       	   local tab=require("Module:Parametry").ParsujWywolanieSzablonu(znaczenia);
       	   if(tab)then
       	    local autor=tab["Autor"];
       	    local szkoly=tab["Ukończone szkoły"];
       	    local email=tab["Email"];
       	    local dotyczy=tab["Dotyczy"];
       	    local licencjonowanie=tab["Licencjonowanie"];
       	    local umowa_prawna=tab["Umowa prawna"];
       	    local konsekwencje=tab["Konsekwencje"];
       	    local reg="%[%[([^%[%]|]-)&#"..tostring(mw.ustring.byte("|"))..";([^%[%]|]-)%]%]";
       	    if(autor~=nil)then
       	    	 autor=mw.ustring.gsub(autor,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(szkoly~=nil)then
       	    	  szkoly=mw.ustring.gsub(szkoly,reg,"[[".."%1".."|".."%2".."]]");
       	    end; 
       	    if(email~=nil)then
       	    	  email=mw.ustring.gsub(email,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(dotyczy~=nil)then
       	    	  dotyczy=mw.ustring.gsub(dotyczy,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(licencjonowanie~=nil)then
       	    	  licencjonowanie=mw.ustring.gsub(licencjonowanie,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(umowa_prawna~=nil)then
       	    	  umowa_prawna=mw.ustring.gsub(umowa_prawna,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(konsekwencje~=nil)then
       	    	  konsekwencje=mw.ustring.gsub(konsekwencje,reg,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(autor~=nil)then 
       	  	   tr2={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje};
       	  	   br=false; 
       	    end;
       	   elseif(tablist.blad_wewnetrzny==nil)then
       	   	tablist.blad_wewnetrzny=0;
       	   end
       	  end;
       end;
    end;
    if(dec)then tablist2={tr, tr2};else tablist2=tr;end;
    return tablist2;
end;
function wz(kod,tablist2, tablist, nazwa_modolu, co, dec)
    local s=mw.ustring.match(kod,"^%s*$");
    if(not s)then
       local listc={};
       listc[1]=kod;
       if(#tablist2[co]==0)then sprawdz(tablist, nazwa_modolu, kod);end;
       tablist2[co][#tablist2[co]+1]=listc;
       if(nazwa_modolu==tablist.nazwa_modolu)then
          if(not tablist.kodkategorie)then tablist.kodkategorie=co..":"..kod;end;
       end;
 end;
end;
function indexwzorgrafika(tab,tablist2, tablist, nazwa_modolu, co, dec)
	local kod=tab[2];
    if(kod)then wz(kod,tablist2, tablist, nazwa_modolu, co, dec);end;
end;
function wzor(tab,tablist2, tablist, nazwa_modolu,co, dec)
	local kod=nil;
	if(tab["numeracja"]~=nil)then 
		kod=tab["numeracja"];
    elseif(tab[2]~=nil)then
		kod=tab[2];
end;
	if(kod)then wz(kod,tablist2, tablist, nazwa_modolu, co, dec);end;
end;
function inneelementy(tab,tablist2, tablist, nazwa_modolu,co, dec)
	local kod=nil;
	if(tab["numeracja"]~=nil)then 
		kod=tab["numeracja"];
    elseif(tab[1]~=nil)then
		kod=tab[1];
end;
	if(kod)then wz(kod,tablist2, tablist, nazwa_modolu, co, dec);end;
end;
function sprawdz(tablist, nazwa_modolu, kodr)
	local title=mw.title.makeTitle('',nazwa_modolu);
	local plik;
	if(title)then
    	local s=mw.loadData("Module:StronicowyParser/data2");
    	if((title.nsText==s.main)or(title.nsText==s.wikijunior)or(title.nsText==s.user))then
		     plik=mw.getCurrentFrame():expandTemplate{title="PEŁNANAZWAKSIĄŻKI",args={nazwa_modolu}};
    	else
    		return;
    	end;
    	if(not title.exists)then 
    		return;
    	end;
    else
    	return;
    end;	
	if(plik)then
  		local prs=false;
  		local pr=false;
		if(tablist.list)then
    		if(tablist.list[plik])then
  				pr=true;
  				for i, value2 in ipairs(tablist.list[plik]) do
  					if(plik.."/"..value2==nazwa_modolu)then
  	                	prs=true;
  	                	break;
  	            	end;
  	    		end;
  	    	end;
		end;
	  	local list;
  		if(pr)then list=#tablist.list[plik];else list=0;end;
    	if((list==0)or((list~=0)and(prs==false)))then 
        	if((tablist.nazwa_modolu~=nazwa_modolu))then
        		 local title=mw.title.makeTitle('',plik);
            	 if(not tablist.brak_spisu_tresci_do_doloczanych_modolow)then tablist.brak_spisu_tresci_do_doloczanych_modolow={};end;
				 local fa=true;
	             for name,value in pairs(tablist.brak_spisu_tresci_do_doloczanych_modolow)do
    			    if(value==title.nsText)then fa=false;end;
			     end;
				 if(fa)then table.insert(tablist.brak_spisu_tresci_do_doloczanych_modolow,title.nsText);end;
        	elseif((tablist.nazwa_modolu==nazwa_modolu)and(tablist.brak_spisu_tresci_do_korzystanych_modolow==nil))then
            	tablist.brak_spisu_tresci_do_korzystanych_modolow=0;
        	end;
    	end;
   end;
end;
function puste(tablist,plik2, kod1, co)
  local s_k=mw.ustring.match(plik2,"^%s*$");
  local s_p=mw.ustring.match(kod1,"^%s*$");
  if((s_k)or(s_p))then
	if(tablist.puste_parametry[co][1]==nil)then
	 	if(s_k)then tablist.puste_parametry[co][1]=0;end;
	end;
	if(tablist.puste_parametry[co][2]==nil)then
	 	if(s_p)then tablist.puste_parametry[co][2]=0;end;
	end;
	return;
  end;
end;
function linkowanie_next(tablist, co, plik2, kod1)
	puste(tablist,plik2, kod1, co);
	if((not tablist.puste_parametry[co][1])and(not tablist.puste_parametry[co][2]))then
		local brak=mw.ustring.match(plik2,"[|<>{}%[%]]");
		if(not brak)then
    		local tablist0=NumerWzoruIGrafiki2(tablist,plik2, false);
    		if(tablist0)then 
        		sprawdz(tablist,plik2, kod1);
        			if(tablist0==0)then return;end;
        				local val=false;
        				if(tablist.c[plik2]~=nil)then                            
            				if(tablist.c[plik2][co]~=nil)then                                 
            					for ir, value1 in pairs(tablist.c[plik2][co]) do
                					if(value1[1]==kod1)then
                    					val=true;
                					end;                                      
            					end;
        					end
        				end;
        				if(val==false)then
            				if(tablist.d["Link"..co]==nil)then
            					tablist.d["Link"..co]=0;
        					end;
        				end;
    			else
    				if(not tablist.blad_wewnetrzny)then
    					tablist.blad_wewnetrzny=0;
    				end;
    			end;	
    	else
           	 if((tablist.nieprawidlowe_nazwy_korzystanej_strony==nil)and(tablist.nazwa_modolu==nazwa_modolu))then 
  		        tablist.nieprawidlowe_nazwy_korzystanej_strony=0;
  	    	elseif((tablist.nieprawidlowe_nazwy_strony_doloczanej_do_strony==nil)and(tablist.nazwa_modolu~=nazwa_modolu))then
  		           tablist.nieprawidlowe_nazwy_strony_doloczanej_do_strony=0;
        	end;
    	end;
  end;
end;
function linkowanie (tab,tablist, co, linkwzorgrafika)
   local plik2=tab["artykuł"] and tab["artykuł"] or tab[2];
   local kodr=tab["uchwyt"] and tab["uchwyt"] or tab[1];
   local ks0=tab["nazwa książki"] and tab["nazwa książki"] or tab[3];
   if(kodr)then
    if(plik2)then
        if((ks0)and(ks0~=""))then
        	plik2=ks0.."/"..plik2;
        else
        	local ks=mw.getCurrentFrame():expandTemplate{title="PEŁNANAZWAKSIĄŻKI",args={}};
        	plik2=ks.."/"..plik2;
        end;
    	plik2=require("Module:Parametry").transform(plik2);
        plik2=mw.ustring.gsub(plik2,"_"," ");
        if(plik2~=tablist.nazwa_modolu)then
           linkowanie_next(tablist, co, plik2, kodr);
           if(not tablist.kodkategorie)then tablist.kodkategorie=co..":"..kodr;end;
        else
           linkowanie_dalej(kodr, tablist, tablist.nazwa_modolu, co, linkwzorgrafika);
           if(not tablist.kodkategorie)then tablist.kodkategorie=co..":"..kodr;end;
        end;
    else
    	linkowanie_dalej(kodr, tablist, tablist.nazwa_modolu, co, linkwzorgrafika) 
    	if(not tablist.kodkategorie)then tablist.kodkategorie=co..":"..kodr;end;
    end;
   elseif(not tablist.brak_uchwytu[co])then
   	  tablist.brak_uchwytu[co]=0;
   	  if(not tablist.kodkategorie)then tablist.kodkategorie=co..":";end;
   end;
end;
function linkowanie_dalej(kodr,tablist, plik2, co, linkwzorgrafika)
	if(#linkwzorgrafika==0)then sprawdz(tablist,plik2, kodr);end;
    linkwzorgrafika[#linkwzorgrafika+1]=kodr;
    puste(tablist,plik2, kodr, co); 
end;
function LadujObjectPlik(plik,tablist)
   plik=require("Module:Parametry").transform(plik);
   local nazw=mw.ustring.match(plik,"^%s*$");
   local page;
   if(not nazw)then
      page = mw.title.makeTitle('', plik);
      if((page==nil)or(not page.exists))then 
         if(tablist.strona_nie_istnieje==nil)then
         	tablist.strona_nie_istnieje=0
         end;
         return nil;
      end;
    else
      return nil;
    end;
	local ns = page:inNamespace(0);
    local text = page:getContent();
    text=mw.ustring.gsub(text,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1");
    text=mw.ustring.gsub(text,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","");
    text=mw.ustring.gsub(text,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->","");
    text=mw.ustring.gsub(text,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->","");
    text=mw.ustring.gsub(text,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); 	
    while mw.ustring.match(text,"{{[^|{}]-|[^{}]-{{[^{}]-}}.-}}") do
        text=mw.ustring.gsub(text,"({{[^{}|]-|[^{}]-)({{[^{}]-}})(.-}})","%2%1%3");
    end;
    return text;
end;
function WDoloczonychKsiazkachBrakSpisuTresci(tablist,nazwa_strony_glownej)
  if(not tablist.doloczone_brak_spis)then tablist.doloczone_brak_spis={};end;
  local title=mw.title.makeTitle('',nazwa_strony_glownej);
  local fa=true;
  for name,value in pairs(tablist.doloczone_brak_spis)do
      if(value==title.nsText)then fa=false;end;
  end;
  if(fa)then table.insert(tablist.doloczone_brak_spis,title.nsText);end;
end;
function NumerWzoruIGrafiki2(tablist, nazwa_modolu, dec)
   nazwa_modolu=mw.ustring.gsub(nazwa_modolu,"_"," ");
   nazwa_modolu=require("Module:Parametry").transform(nazwa_modolu);
   local title=mw.title.makeTitle('',nazwa_modolu);
   local nazwa_strony_glownej;
   local s=mw.loadData("Module:StronicowyParser/data2");
   if((title.nsText==s.main)or(title.nsText==s.wikijunior))then
    	nazwa_strony_glownej=mw.ustring.match(nazwa_modolu,"^([^/]+).-$");
   elseif(title.nsText==s.user)then	
    	nazwa_strony_glownej=mw.ustring.match(nazwa_modolu,"^([^/:]+:[^/]+/[^/]+).-$");
    	if(not nazwa_strony_glownej)then return tablist;end;
   else 
    	return tablist;
   end;
   if(not dec)then
   	 if(tablist.nazwa_modolu)then
   	   if(tablist.nazwa_modolu==nazwa_modolu)then
   	        return tablist; 
   	  end;
   	else
   		return nil;
   	end;
   end;
   if(tablist~=nil)then
      if(tablist.c~=nil)then
         for name, value in pairs(tablist.c) do
              if(name==nazwa_modolu)then return tablist;end;
         end;
      else 
        return nil; 
       end;
    else 
       return nil; 
   end;
    if(dec)then 
   	  if(not tablist.nazwa_modolu)then
   	    tablist.nazwa_modolu=nazwa_modolu;
   	  end;
   end;
    local text=LadujObjectPlik(nazwa_modolu,tablist);
    if(not text)then return 0;end;
    if(dec)then tablist.TOC[tablist.nazwa_modolu]=SpisTresciWstep(text,"");end;
    local iter=mw.ustring.gmatch(text,"{{[^{}]-}}");
    local licznik=1;
    local tablist2={};
    tablist2["Wzór"]={};
    tablist2["Rysunek"]={};
    tablist2["Patrz"]={};
    tablist2["ZobaczTeż"]={};
    tablist2["Obiekt"]={};
    for name,wypowiedz in pairs(s.wypowiedzi)do
    	local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
    	tablist2[wypowiedz2]={};
    end;
    nazwa_strony_glownej=mw.ustring.gsub(nazwa_strony_glownej,"_"," ");
    if(nazwa_strony_glownej)then
    local prawd=false;
    if(#tablist.list==0)then 
     	local tab=lista2(tablist,nazwa_strony_glownej, dec);
     	if(tab)then 
     		if(dec)then
     	 		tablist.list[nazwa_strony_glownej]=tab[1];
     	 		tablist.lic=tab[2];
     	 		if(not tab[1])then
     	 		   if(not tablist.korzystane_brak_spis)then 
     	 		   	  tablist.korzystane_brak_spis=0;
     	 		   end;
     	 		end;
      		else 
      	 		if(tablist.list[nazwa_strony_glownej]==nil)then
    	 	    	tablist.list[nazwa_strony_glownej]=tab;
    	 	    	if(not tab)then
                         WDoloczonychKsiazkachBrakSpisuTresci(tablist,nazwa_strony_glownej);
    	 	    	end;
    	 		end;
    		end;
    	else
    		if(dec)then
    			if(not tablist.korzystane_brak_spis)then 
     	 		   	  tablist.korzystane_brak_spis=0;
    			end;
    		 else
                WDoloczonychKsiazkachBrakSpisuTresci(tablist,nazwa_strony_glownej);
    		 end;
    	end;
       else
          prawd=false;
          for nazwa_strony_glownej_i,value in pairs(tablist.list) do
               if(nazwa_strony_glownej_i==nazwa_strony_glownej)then
                    prawd=true;
                    break;
               end;
          end;
          if(not prawd)then
    	    local tab=lista2(tablist,nazwa_strony_glownej, dec);
    	    if(tab)then
    	      if(dec)then 
    	 	      tablist.list[nazwa_strony_glownej]=tab[1];
    	 	      tablist.lic=tab[2];
    	 	      if(not tab[1])then
    	 	    	if(not tablist.korzystane_brak_spis)then 
     	 		   	  tablist.korzystane_brak_spis=0;
    	 	        end;
    	 	      end;
    	      else 
    	 	      tablist.list[nazwa_strony_glownej]=tab;
    	 	      if(not tab)then
                      WDoloczonychKsiazkachBrakSpisuTresci(tablist,nazwa_strony_glownej);
    	 	      end;
    	      end;
    	    else
    	    	if(dec)then
    				if(not tablist.korzystane_brak_spis)then 
     	 		   	    tablist.korzystane_brak_spis=0;
    			    end;
    			else
                   WDoloczonychKsiazkachBrakSpisuTresci(tablist,nazwa_strony_glownej);
    			end;
    	    end;
          end;
       end;
    end;
    local linkwzor={};
    local linkgrafika={};
    local linkpatrz={};
    local linkzobacztez={};
    local linkwypowiedz={};
    local linkobiekt={};
    for name,wypowiedz in pairs(s.wypowiedzi)do
    	local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
    	linkwypowiedz[wypowiedz2]={};
    end;
    local znaczenia1;
    for znaczenia1 in iter do
    znaczenia1=mw.ustring.gsub(znaczenia1,"\n+","");	
    local tab=require("Module:Parametry").ParsujWywolanieSzablonu(znaczenia1);
    if((tablist.formatowanie==nil)and(dec))then
      if(tab)then
    	if(mw.ustring.match(tab[0],"^[Ss]tronaStart$")~=nil)then
           tablist.formatowanie=tab["formatowanie"];
    	elseif((mw.ustring.match(tab[0],"^[Ss]komplikowanaStronaStart$")~=nil)
    		or(mw.ustring.match(tab[0],"^[Ss]tronaStart2$")~=nil)
    		or(mw.ustring.match(tab[0],"^[Ss]tandardowaStronaStart$")~=nil)
    		or(mw.ustring.match(tab[0],"^[Pp]odstawowaStronaStart$")~=nil)    		
    		or(mw.ustring.match(tab[0],"^[Pp]rostaStronaStart$")~=nil)    		
    		)
    	    then
    	   tablist.formatowanie="tak";
    	end;
      end;
    end;
    local znak;
    local kod;
     local plik=mw.ustring.match(znaczenia1,"^{{:([^:|{}]-)}}$");
        if(plik==nil)then
          if(tab)then
            if((tab["automat"]==nil)or(tab["automat"]=="TRUE"))then
              if(mw.ustring.match(tab[0],"^[Cc]entrujWzór$"))then
                   indexwzorgrafika(tab,tablist2, tablist, nazwa_modolu, "Wzór",dec);
               elseif(mw.ustring.match(tab[0],"^[[wW]zór$"))then
                   wzor(tab,tablist2, tablist, nazwa_modolu,"Wzór", dec);
               elseif((dec)and((mw.ustring.match(tab[0],"^[Ll]inkWzór$"))or((mw.ustring.match(tab[0],"^[Ll]inkObiekt$"))and(tab["typ"]=="wzór"))))then
                   linkowanie(tab,tablist, "Wzór", linkwzor);
               elseif(mw.ustring.match(tab[0],"^[Rr]ysunek$"))then
                   indexwzorgrafika(tab,tablist2, tablist, nazwa_modolu, "Rysunek",dec);
                elseif(mw.ustring.match(tab[0],"^[Pp]atrz$"))then
                   inneelementy(tab,tablist2, tablist, nazwa_modolu,"Patrz", dec)
                elseif(mw.ustring.match(tab[0],"^[Zz]obaczTeż$"))then
                   inneelementy(tab,tablist2, tablist, nazwa_modolu,"ZobaczTeż", dec)   
                elseif((dec)and((mw.ustring.match(tab[0],"^[Ll]inkRysunek$"))or((mw.ustring.match(tab[0],"^[Ll]inkObiekt$"))and(tab["typ"]=="rysunek"))))then
                    linkowanie(tab,tablist, "Rysunek", linkgrafika);
                elseif((dec)and((mw.ustring.match(tab[0],"^[Ll]inkPatrz$"))or((mw.ustring.match(tab[0],"^[Ll]inkObiekt$"))and(tab["typ"]=="patrz"))))then
                   linkowanie(tab,tablist, "Patrz", linkpatrz);                        
                elseif((dec)and((mw.ustring.match(tab[0],"^[Ll]inkZobaczTeż$"))or((mw.ustring.match(tab[0],"^[Ll]inkObiekt$"))and(tab["typ"]=="zobaczteż"))))then
                   linkowanie(tab,tablist, "Patrz", linkzobacztez); 
                else
               	    local fa=true;
               	    local fa1=true;
               		if(mw.ustring.match(tab[0],"^[[wW]ypowiedzenie$"))then
               			fa1=false;
               			for name, wypowiedz in pairs(s.wypowiedzi)do
               				local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
               				if(tab["Rodzaj"]==wypowiedz2)then
               					fa=false;
               					break;
               				end;
               			end;
               			if(fa)then
               				wzor(tab,tablist2, tablist, nazwa_modolu,"Obiekt", dec);
               			end;
            		elseif(mw.ustring.match(tab[0],"^[[Ll]inkObiekt$"))then
            			fa1=false;
               	        for name, wypowiedz in pairs(s.wypowiedzi)do
               				local wypowiedz2=mw.ustring.lower(mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$"));
               				if(tab["typ"]==wypowiedz2)then
               					fa=false;
               					break;
               				end;
               			end;
               			if(fa)then
               			    linkowanie(tab,tablist, "Obiekt", linkobiekt);
               			end;
                	end;
                    if((not fa)or(fa1))then
               			for name,wypowiedz in pairs(s.wypowiedzi) do
               	    		local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
               	    		local wypowiedz22="["..mw.ustring.upper(mw.ustring.match(wypowiedz,"^(%a)"))..
               	    	                       mw.ustring.lower(mw.ustring.match(wypowiedz,"^(%a)")).."]"..mw.ustring.match(wypowiedz,"^%w(%w*%a+%d*)$");
               	    	
               				if(((mw.ustring.match(tab[0],"^[wW]ypowiedzenie$"))and(tab["Rodzaj"]==wypowiedz2))
               					or(mw.ustring.match(tab[0],"^"..wypowiedz22.."$")))then
                				wzor(tab,tablist2, tablist, nazwa_modolu, wypowiedz2, dec);
                				break;
            				elseif((dec)and((mw.ustring.match(tab[0],"^[Ll]ink"..wypowiedz2.."$"))
            				       or((mw.ustring.match(tab[0],"^[Ll]inkObiekt$"))and(tab["typ"]==mw.ustring.lower(wypowiedz2)))))then
               					linkowanie(tab,tablist, wypowiedz, linkwypowiedz[wypowiedz2]);
               					break;
           					end;
           				end;
       	        	end;
               end;
             end;
           end;
         end; 
       end;
   if(dec)then
    	spr(tablist,tablist2,linkwzor,"Wzór","LinkWzór", nazwa_modolu);
    	spr(tablist,tablist2,linkgrafika,"Rysunek","LinkRysunek", nazwa_modolu);
    	spr(tablist,tablist2,linkzobacztez,"ZobaczTeż","LinkZobaczTeż", nazwa_modolu);
    	spr(tablist,tablist2,linkpatrz,"Patrz","LinkPatrz", nazwa_modolu);
    	spr(tablist,tablist2,linkobiekt,"Obiekt","LinkObiekt", nazwa_modolu);
    	for name,wypowiedz in pairs(s.wypowiedzi)do
     		 local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
        	spr(tablist,tablist2,linkwypowiedz[wypowiedz2],wypowiedz2,"Link"..wypowiedz2, nazwa_modolu);
    	end;
   end;
   tablist.c[nazwa_modolu]={};
   tablist.c[nazwa_modolu]=tablist2;
   return tablist;
end;
function spr(tablist,tablist2,link_gr_wz, co1, co2, nazwa_modolu)
if(tablist.d[co2]==nil)then
     for i1, value1 in ipairs(link_gr_wz) do
       local lo=true;
       for i2, value2 in ipairs(tablist2[co1]) do
               if(value1==value2[1])then
               	   lo=false;
                   break;
               end;
           end;
        if(lo==true)then
        	local s=mw.ustring.match(value1,"^%s*$");
        	if(s)then
        	    if(tablist.puste_parametry[co1]==nil) then
                  tablist.puste_parametry[co1][1]=0;
                end;
                return;
              elseif(tablist.d[co2]==nil)then
               tablist.d[co2]=0;
               return; 
           end;
        end;
      end;
    end;
end;
function NumerWzoruIGrafiki3(tablist)
     for nazwa_modolu, val in pairs(tablist.c) do
    	local i2=1;local fa=false;
    	local title=mw.title.makeTitle('',nazwa_modolu);
    	local s=mw.loadData("Module:StronicowyParser/data2");
    	local nazwa_strony_glownej;
    	if((title.nsText==s.main)or(title.nsText==s.wikijunior)or(title.nsText==s.user))then
    		  nazwa_strony_glownej=mw.getCurrentFrame():expandTemplate{title="PEŁNANAZWAKSIĄŻKI",args={nazwa_modolu}};
    	else
    		return tablist;
    	end;
    	if(nazwa_strony_glownej)then
    		 nazwa_strony_glownej=mw.ustring.gsub(nazwa_strony_glownej,"_"," ");
        	 if(tablist.list)then 
     			if(tablist.list[nazwa_strony_glownej])then
     	   			for s, value in ipairs(tablist.list[nazwa_strony_glownej]) do
     					if(nazwa_strony_glownej.."/"..value~=nazwa_modolu)then i2=i2+1; else fa=true;break;end;
     				end;
 	    		end;
 	    	end;
     		if(fa)then
     		   tablist=spr2(tablist,nazwa_modolu,"Wzór",i2);
               tablist=spr2(tablist,nazwa_modolu,"Rysunek",i2);
               tablist=spr2(tablist,nazwa_modolu,"ZobaczTeż",i2);
               tablist=spr2(tablist,nazwa_modolu,"Patrz",i2);
               tablist=spr2(tablist,nazwa_modolu,"Obiekt",i2);
               for name,wypowiedz in pairs(s.wypowiedzi)do
     			   local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
        		   tablist=spr2(tablist,nazwa_modolu,wypowiedz2,i2);
    		  end;
        	elseif(not fa)then
                tablist=spr2(tablist,nazwa_modolu,"Wzór",0);
                tablist=spr2(tablist,nazwa_modolu,"Rysunek",0);
                tablist=spr2(tablist,nazwa_modolu,"ZobaczTeż",0);
                tablist=spr2(tablist,nazwa_modolu,"Patrz",0);
                tablist=spr2(tablist,nazwa_modolu,"Obiekt",0);
                for name,wypowiedz in pairs(s.wypowiedzi)do
     				local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
        		    tablist=spr2(tablist,nazwa_modolu,wypowiedz2,0);
    		   end;
     	    end;
    	else
    		tablist=spr2(tablist,nazwa_modolu,"Wzór",0);
    		tablist=spr2(tablist,nazwa_modolu,"Rysunek",0);	
            tablist=spr2(tablist,nazwa_modolu,"ZobaczTeż",0);
            tablist=spr2(tablist,nazwa_modolu,"Patrz",0);
    		tablist=spr2(tablist,nazwa_modolu,"Obiekt",0);
    		for name,wypowiedz in pairs(s.wypowiedzi)do
     			local wypowiedz2=mw.ustring.match(wypowiedz,"^(%w*%a+)%d*$");
        		tablist=spr2(tablist,nazwa_modolu,wypowiedz2,0);
    		end;
    	end;
  end;
    return tablist;
end;
function spr2(tablist, nazwa_modolu, co, i2)
   for i, value in ipairs(tablist.c[nazwa_modolu][co]) do
       local boo=false;
		for s=1, i-1,1 do
   	      if(value[1]==tablist.c[nazwa_modolu][co][s][1])then
              if(not tablist.d[co])then
                tablist.d[co]=0;
                value[2]=nil;
              end;
              if(tablist.c[nazwa_modolu][co][s][1])then tablist.c[nazwa_modolu][co][s][2]=nil;end;
              boo=true;
           end;
        end;
      if(not boo)then
      	if(i2>0)then
      	   value[2]=i2.."."..i;
      	elseif(i2==0)then
      		value[2]=i
       elseif(tablist.blad_wewnetrzny==nil)then
            tablist.blad_wewnetrzny=0
      	end;	
      end;
   end;
   return tablist;
end;
function NumerObiektu(frame, co)
  local plik=require("Module:Parametry").transform(frame.args[1]);
  plik=mw.ustring.gsub(plik,"_"," ");
  local d=mw.loadData("Moduł:StronicowyParser/data").c;
  local nam=nil;
  local _value=d.c[plik];
  if(_value)then
     for i, value in ipairs(_value[co]) do
      	if(value[1]==frame.args[2])then
             return value[2];
        end;
     end;   
     return nil;
   else
   	 return nil;
   end;
end;
function NumerObiektu2(frame,co)
  local title=mw.title.getCurrentTitle();
   local s=mw.loadData("Module:StronicowyParser/data2");
  if((title.nsText==s.main)or(title.nsText==s.wikijunior)or(title.nsText==s.user))then
		local fc=NumerObiektu(frame,co);
		if(not fc)then  
    		return "Niedopasowany uchwyt: "..frame.args[2];
		else
    		return fc;
		end;
	else
		return frame.args[2];
	end;
end;
function p.NumerObiektu(frame)
   return NumerObiektu2(frame,"Obiekt");
end;
function p.NumerWzoru(frame)
  return NumerObiektu2(frame,"Wzór");
end;
p["NumerZobaczTeż"] = function(frame)
  return NumerObiektu2(frame,"ZobaczTeż");
end;
function p.NumerPatrz(frame)
  return NumerObiektu2(frame,"Patrz");
end;
function p.NumerRysunku(frame)
  return NumerObiektu2(frame,"Rysunek");
end;
function p.NumerTwierdzenia(frame)
  return NumerObiektu2(frame,"Twierdzenie");
end;
function p.NumerHipotezy(frame)
  return NumerObiektu2(frame,"Hipoteza");
end;
function p.NumerLematu(frame)
  return NumerObiektu2(frame,"Lemat");
end;
function p.NumerKryterium(frame)
  return NumerObiektu2(frame,"Kryterium");
end;
function p.NumerDowodu(frame)
  return NumerObiektu2(frame,"Dowód");
end;
function p.NumerPostulatu(frame)
  return NumerObiektu2(frame,"Postulat");
end;
function p.NumerPostulatow(frame)
  return NumerObiektu2(frame,"Postulaty");
end;
function p.NumerDefinicji(frame)
  return NumerObiektu2(frame,"Definicja");
end;
function p.NumerZadania(frame)
  return NumerObiektu2(frame,"Zadanie");
end;
function p.NumerCwiczenia(frame)
  return NumerObiektu2(frame,"Ćwiczenie");
end;
function p.NumerProcedury(frame)
  return NumerObiektu2(frame,"Procedura");
end;
function p.NumerSchematu(frame)
  return NumerObiektu2(frame,"Schemat");
end;
function p.formatowanie()
	local d=mw.loadData('Moduł:StronicowyParser/data');
	return d.c.formatowanie;
end;
function p.WstawKategorie(frame)
  local title=mw.title.getCurrentTitle();
  local s=mw.loadData("Module:StronicowyParser/data2");
  if((title.nsText~=s.main)and(title.nsText~=s.wikijunior)and(title.nsText~=s.user))then
  		return;
  end;
  local d=mw.loadData('Moduł:StronicowyParser/data');
  if(not d.c.kodkategorie)then return "";end;
  local kod1=frame.args[2]..":"..frame.args[1];
  local string1="";
  local kod2=d.c.kodkategorie;
  if(kod1==kod2)then
  	    local strony,strony2,_strony;
  	    if(title.nsText==s.user)then
  	    	strony="Strony użytkowników,";
  	    	strony2="stron użytkowników";
  	    elseif(title.nsText==s.wikijunior)then
  	    	strony="Artykuły dla dzieci,";
  	    	strony2="artykułów dla dzieci";
  	    else
  	    	strony="Artykuły";
  	    	strony2="artykułów";
  	    end;
   		if(d.c.d["Wzór"])then
              if(d.c.d["Wzór"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze wzorami ze złymi uchwytami]]";
              end;
    	end;
    	if(d.c.d["Rysunek"])then
            if(d.c.d["Rysunek"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." z grafikami ze złymi uchwytami]]";
            end;
    	end;
    	if(d.c.d["Patrz"])then
              if(d.c.d["Patrz"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." z Patrz ze złymi uchwytami]]";
              end;
    	end;
    	if(d.c.d["ZobaczTeż"])then
            if(d.c.d["ZobaczTeż"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." z ZobaczTeż ze złymi uchwytami]]";
            end;
    	end;
    	if(d.c.d["Obiekt"])then
            if(d.c.d["Obiekt"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." z obiektami ze złymi uchwytami]]";
            end;
    	end;
    	if(d.c.d["LinkWzór"])then
            if(d.c.d["LinkWzór"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do wzorów]]";
            end;
    	end;
    	if(d.c.d["LinkRysunek"])then
            if(d.c.d["LinkRysunek"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do grafik]]";                 
            end;
    	end;
    	if(d.c.d["LinkPatrz"])then
            if(d.c.d["LinkPatrz"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do Patrz]]";
            end;
    	end;
    	if(d.c.d["LinkZobaczTeż"])then
            if(d.c.d["LinkZobaczTeż"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do ZobaczTeż]]";                 
            end;
    	end;
    	if(d.c.d["LinkObiekt"])then
            if(d.c.d["LinkObiekt"]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do obiektów]]";                 
            end;
    	end;
    	if((d.c.brak_spisu_tresci_do_korzystanych_modolow)and(not d.c.korzystane_brak_spis))then 
            	string1=string1.."[["..s.category..": Brakujące spisy treści, do korzystanych "..((title.nsText==s.main)and " artykułów" 
    		                                            or((title.nsText==s.wikijunior)and " artykułów dla dzieci" 
    		                                               or ((title.nsText==s.user) and " stron użytkowników"
    		                                                      or "stron")))..", w książkach]]";
    	end;
    	if((d.c.brak_spisu_tresci_do_doloczanych_modolow)and (not d.c.doloczone_brak_spis))then 
        		for name,value in pairs(d.c.brak_spisu_tresci_do_doloczanych_modolow)do
            		string1=string1.."[["..s.category..": Brakujące spisy treści, dołączonych do "..((title.nsText==s.main)and " artykułów" 
    		                                            or((title.nsText==s.wikijunior)and " artykułów dla dzieci" 
    		                                               or ((title.nsText==s.user) and " stron użytkowników"
    		                                                      or "stron")))..", w książkach"..((value==s.main)and "" 
    		                                            or((value==s.wikijunior)and " dla dzieci" 
    		                                               or ((value==s.user) and " użytkowników"
    		                                                      or " innych"))).."]]";
    		  end;
    	end;
    	if(d.c.nieprawidlowe_nazwy_korzystanej_strony)then 
        	if(d.c.nieprawidlowe_nazwy_korzystanej_strony==0)then
            	string1=string1.."[["..s.category..": "..strony.." z nieprawidłowymi nazwami korzystanych stron]]";
        	end;
    	end;
    	if(d.c.nieprawidlowe_nazwy_strony_doloczanej_do_strony)then 
        	if(d.c.nieprawidlowe_nazwy_strony_doloczanej_do_strony==0)then
            	string1=string1.."[["..s.category..": "..strony.." z nieprawidłowymi nazwami dołączonych stron]]";
        	end;
    	end;       
    	if(d.c.strona_nie_istnieje)then 
        	if(d.c.strona_nie_istnieje==0)then
            	string1=string1.."[["..s.category..": "..strony.." z dołączonymi nieistniejącymi stronami]]";
        	end;
    	end;
    	if(d.c.blad_wewnetrzny)then 
        	if(d.c.blad_wewnetrzny==0)then
            	string1=string1.."[["..s.category..": "..strony.." z błędami wewnętrznymi skryptów]]";
        	end;
    	end;
    	if(d.c.niedozwolone_znaki_spisie_tresci)then
    		if(d.c.niedozwolone_znaki_spisie_tresci==0)then
    			string1=string1.."[["..s.category..":Nazwy "..strony2..", w spisach treści zawierają niedozwolone znaki]]";
    		end;
    	end;
    	if(d.c.puste_parametry["Wzór"][1])then
        	if(d.c.puste_parametry["Wzór"][1]==0)then 
        		string1=string1.."[["..s.category..": "..strony.." z pustymi nazwami stron w odnośnikach do wzorów]]"; 
        	end;
    	end;
    	if(d.c.puste_parametry["Wzór"][2])then
        	if(d.c.puste_parametry["Wzór"][2]==0)then 
          		string1=string1.."[["..s.category..": "..strony.." z pustymi uchwytami w odnośnikach do wzorów]]"; 
        	end;
    	end;
    	if(d.c.puste_parametry["Rysunek"][1])then
        	if(d.c.puste_parametry["Rysunek"][1]==0)then 
        		string1=string1.."[["..s.category..": "..strony.." z pustymi nazwami stron w odnośnikach do grafik]]"; 
        	end;
    	end;
    	if(d.c.puste_parametry["Rysunek"][2])then
        	if(d.c.puste_parametry["Rysunek"][2]==0)then 
        		   string1=string1.."[["..s.category..": "..strony.." z pustymi uchwytami w odnośnikach do grafik]]"; 
        	end;
    	end;
    	if(d.c.puste_parametry["Obiekt"][1])then
        	if(d.c.puste_parametry["Obiekt"][1]==0)then 
        		string1=string1.."[["..s.category..": "..strony.." z pustymi nazwami stron w odnośnikach do obiektów]]"; 
        	end;
    	end;
    	if(d.c.puste_parametry["Obiekt"][2])then
        	if(d.c.puste_parametry["Obiekt"][2]==0)then 
          		string1=string1.."[["..s.category..": "..strony.." z pustymi uchwytami w odnośnikach do obiektów]]"; 
        	end;
    	end;	
    	if(d.c.brak_uchwytu["Wzór"])then
        	string1=string1.."[["..s.category..": "..strony.." z odnośnikami, z brakiem uchwytu, do wzorów]]";
    	end;
    	if(d.c.brak_uchwytu["Rysunek"])then
        	  string1=string1.."[["..s.category..": "..strony.." z odnośnikami, z brakiem uchwytu, do grafik]]";
    	end;    
    	if(d.c.brak_uchwytu["Obiekt"])then
        	  string1=string1.."[["..s.category..": "..strony.." z odnośnikami, z brakiem uchwytu, do obiektów]]";
    	end;
    	if(d.c.korzystane_brak_spis)then
    		string1=string1.."[["..s.category..": Brak spisu treści, korzystanych "..((title.nsText==s.main)and "artykułów" 
    		                                            or((title.nsText==s.wikijunior)and "artykułów dla dzieci" 
    		                                               or ((title.nsText==s.user) and "stron użytkowników"
    		                                                      or "stron")))..", do książek]]";
    	end;
    	if(d.c.doloczone_brak_spis)then
    		for name,value in pairs(d.c.doloczone_brak_spis)do
    			string1=string1.."[["..s.category..": Brak spisu treści, dołączonych do "..((title.nsText==s.main)and "artykułów" 
    		                                            or((title.nsText==s.wikijunior)and "artykułów dla dzieci" 
    		                                               or ((title.nsText==s.user) and "stron użytkowników"
    		                                                      or "stron")))..", do książek"..((value==s.main)and "" 
    		                                            or((value==s.wikijunior)and " dla dzieci" 
    		                                               or ((value==s.user) and " użytkowników"
    		                                                      or " innych"))).."]]";
    		end;
		end;
		local p=0;
		for name,value in ipairs(s.wypowiedzi)do
			p=p+1;
		end;
    	for i=1,p,1 do
    		local wypowiedzi2=mw.ustring.match(s.wypowiedzi[i],"^(%w*%a+)%d*$");
    		if(d.c.d[wypowiedzi2])then
            	if(d.c.d[wypowiedzi2]==0)then
                    string1=string1.."[["..s.category..": "..strony.." "
                                                ..mw.getCurrentFrame():callParserFunction{name='#invoke:Łatki',args={"Z",s.wypowiedzi_z[i]}}
                                                .." "..s.wypowiedzi_z[i].." ze złymi uchwytami]]";
            	end;
    		end;
    		if(d.c.d["Link"..wypowiedzi2])then
            	if(d.c.d["Link"..wypowiedzi2]==0)then
                    string1=string1.."[["..s.category..": "..strony.." ze złymi uchwytami do "..s.wypowiedzi_do[i].."]]";                 
            	end;
    		end;
    		if(d.c.puste_parametry[wypowiedzi2][1])then
        		if(d.c.puste_parametry[wypowiedzi2][1]==0)then 
        			string1=string1.."[["..s.category..": "..strony.." z pustymi nazwami stron w odnośnikach do "..s.wypowiedzi_do[i].."]]"; 
        		end;
    		end;
    		if(d.c.puste_parametry[wypowiedzi2][2])then
        		if(d.c.puste_parametry[wypowiedzi2][2]==0)then 
          			string1=string1.."[["..s.category..": "..strony.." z pustymi uchwytami w odnośnikach do "..wypowiedzi_do[i].."]]"; 
        		end;
    		end;
    		if(d.c.brak_uchwytu[wypowiedzi2])then
        	  string1=string1.."[["..s.category..": "..strony.." z odnośnikami, z brakiem uchwytu, do "..wypowiedzi_do[i].."]]";
    		end; 
    	end;
    end;
    return string1;
end;
return p;