Moduł:StronicowyParser

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacja, szukaj

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:StronicowyParser/opis

local p = {}
function  p.SpisTresci( frame )
    local args = frame.args;
    local myTitle, myString = mw.title, string;
    local page = myTitle.makeTitle(args[2] or '', args[1]);
    if((page==nil)or(not page.exists))then 
    	local names=myString.gsub(myString.match(args[1],"[^/]*$"),"_"," ");
    	local znaczenia="======<FONT COLOR=\"red\">[["..args[1].."|"..names.."]]</FONT>======";
        return znaczenia;
    end;
    local ns = page:inNamespace( 0 );
    local text = page:getContent();
    text=myString.gsub(text,"(\n=+[^\n]+=+ *\n)","\n%1\n");
    text=myString.gsub(text,"^(=+[^\n]+=+ *\n)","\n%1\n");
    text=myString.gsub(text,"(\n=+[^\n]+=+ *)$","\n%1\n");
    text=myString.gsub(text,"<[mM][aA][tT][hH]>.-</[mM][aA][tT][hH]>","");
    text=myString.gsub(text,"<[nN][oO][wW][iI][kK][iI]>.-</[nN][oO][wW][iI][kK][iI]>","");
    local znaczenia="";
    local dpocz=nil;
    local ostatnie=nil;
    local znaczenia1;    
    local tab={};
    local iter=myString.gmatch(text, "\n=+[^\n]+=+ *\n");
    for znaczenia1 in iter do
           local i=1;
           local znaczenia2="";
          local s1,d1;
           while true do
                   local str=myString.rep("=",i);
                   local s=myString.find(znaczenia1,"\n"..str, 1);
                   local d=myString.find(znaczenia1,str.." *\n$", 1);
                   if ((s==nil) or (d==nil))then
                       i=i-1; 
                       znaczenia2=myString.sub(znaczenia1,s1+i+1,d1-1);
                       znaczenia2=myString.gsub(znaczenia2,"^ +","");
                       znaczenia2=myString.gsub(znaczenia2," +$","");
                       break;
                   end;
                   s1=s;
                   d1=d;
                   i=i+1;
          end;
             local nazwa=myString.gsub(znaczenia2,"<.->","");
             nazwa=myString.gsub(nazwa,"\'\'\'","");
             nazwa=myString.gsub(nazwa,"\'\'","");
             nazwa=myString.gsub(nazwa,"^[ _]*","");
             nazwa=myString.gsub(nazwa,"[ _]*$","");
             nazwa=myString.gsub(nazwa,"_"," ");
             local licznikb=1;
             for c=1,#tab do
               if(tab[c]==nazwa)then licznikb=licznikb+1;end;
             end;
             local addres;
             if(licznikb==1)then
                 adress="[["..args[1].."#"..nazwa.."|"..znaczenia2.."]]";
             else
                 adress="[["..args[1].."#"..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]=nazwa;  
             adress=myString.rep("#",i-dpocz)..adress;
             if(znaczenia~="")then 
             	 znaczenia=znaczenia.."\n"..adress;
             else 
             	znaczenia=adress;
             end;
     end;
      local names=myString.gsub(myString.match(args[1],"[^/]*$"),"_"," ");
      local znaczenia3="======[["..args[1].."|"..names.."]]======";
      if(znaczenia~="")then
      	    znaczenia=znaczenia3.."\n"..znaczenia;
      else
      	   znaczenia=znaczenia3;
      end;
    return znaczenia;
end;
function p.lista()
    local frame=mw.getCurrentFrame();
    local d=frame:preprocess( "{{FULLPAGENAME}}");
    local tabled={};
    tabled.c={};
    tabled.blue=nil;
    tabled=NumerWzoruIGrafiki2(tabled,d, true);
    tabled=NumerWzoruIGrafiki3(tabled);
    tabled.red=CzyMaszNumeracjeWzor(tabled.c);
    tabled.black=CzyMaszNumeracjeGrafika(tabled.c);
    return tabled;
end;
function lista2(p)
   local myTitle, myString = mw.title, string;
   local page = myTitle.makeTitle('', p);
   if((page==nil)or(not page.exists))then 
      return nil;
   end;
   local ns = page:inNamespace( 0 );
   local text = page:getContent();
   local iter=myString.gmatch(text,"{{SpisTreści|(.-)}}");
   local znaczenia="";
   local tabled={};
   for znaczenia in iter do
       local znaczenia1=myString.gsub(znaczenia,"_"," ");
       tabled[#tabled+1]=string.gsub(znaczenia1,"&#(%d-);",function(s) return string.char(tonumber(s)) end);
       end;
   return tabled;
end;
function NumerWzoruIGrafiki2(tabled, nazwa_modolu,dec)
   local myTitle, myString,myTable = mw.title, string, table;
   nazwa_modolu=string.gsub(nazwa_modolu,"&#(%d-);",function(s) return string.char(tonumber(s)) end);
   for name, value in pairs(tabled.c) do
      if(tabled.c[name]==nazwa_modolu)then return tabled;end;
   end;
   local page = myTitle.makeTitle('', nazwa_modolu);
   if((page==nil)or(not page.exists))then 
       return nil;
   end;
    local ns = page:inNamespace(0);
    local text = page:getContent();
    text=myString.gsub(text,"<[mM][aA][tT][hH]>.-</[mM][aA][tT][hH]>","");
    text=myString.gsub(text,"<[nN][oO][wW][iI][kK][iI]>.-</[nN][oO][wW][iI][kK][iI]>","");   
    local iter=myString.gmatch(text,"{{[^{}]-}}");
    local licznik=1;
    local tabled2={};
    tabled2["Wzór"]={};
    tabled2["Grafika"]={};
    local tablep={};
    local  nazwa_strony_glownej=myString.gsub(nazwa_modolu,"/[^/]*$","");
    local list=lista2(nazwa_strony_glownej);
    for znaczenia1 in iter do
    znaczenia1=myString.gsub(znaczenia1,"\n+","");
    local znak;
    local kod;
     local plik=myString.match(znaczenia1,"^{{:([^:|{}]-)}}$");
        if(plik~=nil)then
          if(dec==true)then
              plik=myString.gsub(plik,"_"," ");
              plik=string.gsub(plik,"&#(%d-);",function(s) return string.char(tonumber(s)) end);
              local tabled01=NumerWzoruIGrafiki2(tabled, plik,true);
              if(tabled01~=nil)then 
                   tabled=tabled01;
                   tablep[#tablep+1]=plik;
             end;
          end;
      else 
              local calasc1=myString.find(znaczenia1,"^{{Książka}}$");
              local calasc2=myString.find(znaczenia1,"^{{Książka|[^{}|]-|[^{}|]-}}$");  
               if((calasc1~=nil)or( calasc2~=nil)) then
                if(dec==true) then
                  local sklad={};
                     if(calasc1~=nil)then
                         sklad[1]=1;
                         sklad[2]=#list;
                     elseif(calasc2~=nil)then
                         local c1=myString.match(znaczenia1,"^{{Książka|([^{}|]-)|[^{}|]-}}$");
                         local c2=myString.match(znaczenia1,"^{{Książka|[^{}|]-|([^{}|]-)}}$");
                         if(c1=="none") then sklad[1]=1;else sklad[1]=tonumber(c1);end;
                         if(c2=="none") then sklad[2]=#list; else sklad[2]=tonumber(c2);end;
                     else
                         return nil;     
                     end;
                       for i=sklad[1], sklad[2],1 do
                             local pliks=list[i];
                             pliks=myString.gsub(pliks,"_"," ");
                             pliks=string.gsub(pliks,"&#(%d-);",function(s) return string.char(tonumber(s)) end);
                             local tabled01=NumerWzoruIGrafiki2(tabled, pliks,true);
                                 if(tabled01~=nil)then 
                                   tabled=tabled01;
                                   tablep[#tablep+1]=pliks;
                                end;
                      end;
                end;
          else
             if(myString.match(znaczenia1,"^{{[iI]ndexWzór|")~=nil)then
                local pel=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-}}$");
                if(pel==nil)then
                      kod=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]-)}}$");
                      if(kod==nil)then
                          kod=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]-)|.-}}$");
                          if(kod~=nil)then
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                          end;
                      else
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                      end;
                end;
          else
             if(myString.match(znaczenia1,"^{{[[wW]zór|")~=nil)then
                 kod=myString.match(znaczenia1,"^{{[^|{}]+| *numeracja *=([^=|{}]-)|.-}}$");
                 if(kod~=nil)then
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                 else
                    kod=myString.match(znaczenia1,"^{{[^|{}]+|.-| *numeracja *=([^=|{}]-)}}$");
                    if(kod~=nil)then
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                    else
                        kod=myString.match(znaczenia1,"^{{[^|{}]+|.-| *numeracja *=([^=|{}]-)|.-}}$");
                        if(kod~=nil)then
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                        else
                           kod=myString.match(znaczenia1,"{{[^|{}]+|[^|]-|([^|{}]-)}}$");
                           if(kod~=nil)then
                             local listc={};
                             listc[1]=kod;
                             tabled2["Wzór"][#tabled2["Wzór"]+1]=listc;
                           end;
                        end;
                    end;
                 end;
             elseif(myString.match(znaczenia1,"^{{[Ll]inkWzór|")~=nil)then
                   local plik2=myString.match(znaczenia1,"^{{[^|{}]+|[^|{}]-|([^|{}]-)}}$");
                   if(plik2~=nil)then
                          if(dec)then
                          	   plik2=myString.gsub(plik2,"_"," ");
                               local tabled0=NumerWzoruIGrafiki2(tabled,plik2,false);
                               if(tabled0~=nil) then 
                                      tabled=tabled0;
                               end;
                          end;
                 else
                       plik2=myString.match(znaczenia1,"^{{[^|{}]+|[^|{}]-|([^|{}]-)|.-}}$");
                       if(plik2~=nil)then
                          if(dec)then
                          	   plik2=myString.gsub(plik2,"_"," ");
                               local tabled0=NumerWzoruIGrafiki2(tabled,plik2,false);
                               if(tabled0~=nil) then 
                                     tabled=tabled0;
                               end;
                              end; 
                          end;
                      end;
                 end;
             end;
                 if(myString.match(znaczenia1,"^{{[iI]ndexGrafika|")~=nil)then
                      local pel=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-}}$");
                      if(pel==nil)then
                           kod=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]-)|[^{}|]-}}$");
                             if(kod==nil)then
                                 kod=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]-)|[^{}|]-|.-}}$");
                                   if(kod~=nil)then
                                     local listc={};
                                     listc[1]=kod;
                                     tabled2["Grafika"][#tabled2["Grafika"]+1]=listc;
                                  end;
                           else
                             local listc={};
                             listc[1]=kod;
                              tabled2["Grafika"][#tabled2["Grafika"]+1]=listc;
                          end;
                   end;
               else
                 if(myString.match(znaczenia1,"^{{[Ll]inkGrafika|")~=nil)then
                   local plik2=myString.match(znaczenia1,"^{{[^|{}]+|[^|{}]-|([^|{}]-)}}$");
                   if(plik2~=nil)then
                          if(dec)then
                          	   plik2=myString.gsub(plik2,"_"," ");
                               local tabled0=NumerWzoruIGrafiki2(tabled,plik2,false);
                               if(tabled0~=nil) then 
                                          tabled=tabled0;
                              end;
                          end;
                 else
                       plik2=myString.match(znaczenia1,"^{{[^|{}]+|[^|{}]-|([^|{}]-)|.-}}$");
                       if(plik2~=nil)then
                          if(dec)then
                          	   plik2=myString.gsub(plik2,"_"," ");
                               local tabled0=NumerWzoruIGrafiki2(tabled,plik2,false);
                               if(tabled0~=nil) then 
                                     tabled=tabled0;
                               end;
                            end; 
                        end;
                end;
              end;
            end;
         end; 
      end; 
    end;
   tabled.c[nazwa_modolu]={};
   tabled.c[nazwa_modolu][1]=tabled2;
   tabled.c[nazwa_modolu][2]=list;
   tabled.c[nazwa_modolu][3]=tablep;
  return tabled;
end;
function p.Ksiazka(frame)
  local d=mw.loadData('Moduł:StronicowyParser/data').c;
  plik=string.gsub(frame.args[1],"&#(%d-);",function(s) return string.char(tonumber(s)) end);
  local list=d.c[plik][2];
  if(frame.args[2]=="none")then frame.args[2]=1;end;
  if(frame.args[3]=="none")then 
     local licznik=0;
     for val1, val2 in ipairs(d.c[plik][2]) do
        licznik=licznik+1;
     end;
        frame.args[3]=licznik;
  end;
  frame_args_2=tonumber(frame.args[2]);
  frame_args_3=tonumber(frame.args[3]);
  local text="";
  for i=frame_args_2, frame_args_3, 1 do
    pliks=list[i];
    text=text.."{{:"..pliks.."}}";
  end;
  local frame=mw.getCurrentFrame();
  local d=frame:preprocess(text);
  return d;
end;
function NumerWzoruIGrafiki3(tabled)
   for c1,c2 in pairs(tabled.c) do
        for c01,c02 in pairs(tabled.c[c1][1])do
            for c11,c22 in ipairs(tabled.c[c1][1][c01]) do
                for nazwa_modolu, value0 in pairs(tabled.c) do
                   if(tabled.c[nazwa_modolu][2]~=nil)then
                      for i2, value2 in ipairs(tabled.c[nazwa_modolu][2]) do
                          if(tabled.c[nazwa_modolu][2][i2]==nazwa_modolu)then
      	 	                      for i, value in ipairs(tabled.c[nazwa_modolu][1][c01]) do
      	 	                          if(tabled.c[nazwa_modolu][1][c01][i][1]==tabled.c[c1][1][c01][c11][1])then
      	 	    		                         tabled.c[nazwa_modolu][1][c01][i][2]=i2.."."..i;
      	 	                          end;
      	 	                      end;	 
      	                  end;	 
                     end;
                end;
             end;
           end;
         end;
       end;
    return tabled;
end;
function NumerWzoru2(frame)
 if(frame.args[3]=="FALSE") then return frame.args[2];end;
  local plik=string.gsub(frame.args[1],"&#(%d-);",function(s) return string.char(tonumber(s)) end);
  local d=mw.loadData("Moduł:StronicowyParser/data").c;
    for nazwa_modolu, value0 in pairs(d.c) do
       if(nazwa_modolu==plik)then
      	 	   for i, value in ipairs(d.c[nazwa_modolu][1]["Wzór"]) do
      	 	        if(d.c[nazwa_modolu][1]["Wzór"][i][1]==frame.args[2])then
                   for e,valuee in  ipairs(d.c[nazwa_modolu][1]["Wzór"][i])do
      	 	    		        if(e==2)then return d.c[nazwa_modolu][1]["Wzór"][i][2];end;
      	 	        end;
              end;
      	 	   end;	 
        end;
   end;
 return nil;
end;
function p.NumerWzoru(frame)
  if(frame.args[3]=="FALSE")then return frame.args[2];end;
  local fc=NumerWzoru2(frame);
  if(fc==nil)then  
         return "Niedopasowany odsyłacz";
  else
    return fc;
  end;
end;
function NumerGrafiki2(frame)
 if(frame.args[3]=="FALSE") then return frame.args[2];end;
  local plik=string.gsub(frame.args[1],"&#(%d-);",function(s) return string.char(tonumber(s)) end);
  local d=mw.loadData("Moduł:StronicowyParser/data").c;
  for nazwa_modolu, value0 in pairs(d.c) do
       if(nazwa_modolu==plik)then
      	 	   for i, value in ipairs(d.c[nazwa_modolu][1]["Grafika"]) do
      	 	        if(d.c[nazwa_modolu][1]["Grafika"][i][1]==frame.args[2])then
                    for e,valuee in  ipairs(d.c[nazwa_modolu][1]["Grafika"][i])do
      	 	    		        if(e==2)then return d.c[nazwa_modolu][1]["Grafika"][i][2];end;
      	 	          end;
      	 	        end;
      	 	   end;	 
        end;
   end;
 return nil;
end;
function p.NumerGrafiki(frame)
  if(frame.args[3]=="FALSE")then return frame.args[2];end;
  local fc=NumerGrafiki2(frame);
  if(fc==nil)then  
         return "Niedopasowany odsyłacz";
  else
    return fc;
  end;
end;
function CzyMaszNumeracjeGrafika(tabled)
   for nazwa_modolu, value0 in pairs(tabled) do
      	 	   for i, value in ipairs(tabled[nazwa_modolu][1]["Grafika"]) do
      	 	    		        if(#tabled[nazwa_modolu][1]["Grafika"][i]==1)then 
                           local tab={};
                           tab[1]=nazwa_modolu;
                           tab[2]=tabled[nazwa_modolu][1]["Grafika"][i][1];
                           tab[3]="Grafika";
                           tab[4]=i;
                            return tab;
                       end;
      	 	        end;
   end;
  return nil;
end;
function CzyMaszNumeracjeWzor(tabled)
   for nazwa_modolu, value0 in pairs(tabled) do
      	 	   for i, value in ipairs(tabled[nazwa_modolu][1]["Wzór"]) do
      	 	    		        if(#tabled[nazwa_modolu][1]["Wzór"][i]==1)then 
                           local tab={};
                           tab[1]=nazwa_modolu;
                           tab[2]=tabled[nazwa_modolu][1]["Wzór"][i][1];
                           tab[3]="Wzór";
                           tab[4]=i;
                            return tab;
                       end;
      	 	        end;
   end;
  return nil;
end;
function p.WstawKategorie(frame)
   local d=mw.loadData('Moduł:StronicowyParser/data');
   local frame_args_1=string.gsub(frame.args[1],"&#(%d-);",function(s) return string.char(tonumber(s)) end);
   frame_args_2=frame.args[2];
    for nazwa_modolu,v2 in pairs(d.c.c) do
   	   if(nazwa_modolu==frame_args_1)then
           for i,c in ipairs(d.c.c[nazwa_modolu][1]["Wzór"]) do
                if(d.c.c[nazwa_modolu][1]["Wzór"][i][1]==frame_args_2)then
                      if(NumerWzoru2(frame)==nil)then
                             return  "[[Kategoria:Strony z nie tymi uchwytami]]";
                     end;
                end;
                if(d.c.red~=nil)then
   	   	  	                                if((d.c.red[2]==frame_args_2)and(d.c.red[1]==nazwa_modolu)and(d.c.red[3]=="Wzór")and(d.c.red[4]==i))then
   	   	  	  	                                   return "[[Kategoria:Strony z nie tymi uchwytami2]]";
   	   	  	                               end;
                           end;
           end;
         for i,c in ipairs(d.c.c[nazwa_modolu][1]["Wzór"]) do
                if(d.c.c[nazwa_modolu][1]["Wzór"][i][1]==frame_args_2)then
                      if(NumerWzoru2(frame)==nil)then
                             return  "[[Kategoria:Strony z nie tymi uchwytami]]";
                     end;
                end;
                      if(d.c.black~=nil)then
   	   	  	                        if((d.c.black[2]==frame_args_2)and(d.c.black[1]==nazwa_modolu)and(d.c.black[3]=="Grafika")and(d.c.black[4]==i))then
   	   	  	  	                          return "[[Kategoria:Strony z nie tymi uchwytami]]";
   	   	  	                       end;
                        end;
           end;
      end;
  end;
 return "";
end;
function p.IdOdsylaczDoWzoru(frame)
   local frame_args_2=string.gsub(frame.args[2],"&#(%d-);",function(s) return string.char(tonumber(s)) end); 
   if(frame.args[3]=="FALSE")then return frame_args_2;end;
   local d=mw.loadData('Moduł:StronicowyParser/data').c;
   local frame_args_1=string.gsub(frame.args[1],"&#(%d-);",function(s) return string.char(tonumber(s)) end);
   for nazwa_modolu, value0 in pairs(d.c) do
   	   if(nazwa_modolu==frame_args_1)then
   	   	  for i, value in ipairs(d.c[nazwa_modolu][3]) do
   	   	  	  if(d.c[nazwa_modolu][3][i]==frame_args_2)then
   	   	  	  	  return "";
   	   	  	  end;
   	   	  end;
   	   end;
   end;
   return frame_args_2;
end;
return p