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.list={};
    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);
   nazwa_modolu=myString.gsub(nazwa_modolu,"_"," ");
   if(tabled~=nil)then
      if(tabled.c~=nil)then
         for name, value in pairs(tabled.c) do
              if(name==nazwa_modolu)then return tabled;end;
         end;
      else 
        return nil; 
       end;
    else 
       return  nil; 
   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  nazwa_strony_glownej=myString.gsub(nazwa_modolu,"/[^/]*$","");
  if(#tabled.list==0)then 
          tabled.list[nazwa_strony_glownej]=lista2(nazwa_strony_glownej);
    else
          local prawd=false;
          for nazwa_strony_glownej_i,value in pairs(d.list) do
               if(nazwa_strony_glownej_i==nazwa_strony_glownej)then
                    prawd=true;
                    break;
               end;
          end;
          if(not prawd)then
               tabled.list[nazwa_strony_glownej]=list2(nazwa_strony_glownej);
          end;
    end;
    for znaczenia1 in iter do
    znaczenia1=myString.gsub(znaczenia1,"\n+","");
    local znak;
    local kod;
     local plik=myString.match(znaczenia1,"^{{:([^:|{}]-)}}$");
        if(plik==nil)then
             if(myString.match(znaczenia1,"^{{[iI]ndexWzór|")~=nil)then
                local pel=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-}}$");
                if(pel==nil)then
                    local pol2=myString.match(znaczenia1,"^{{.-|automat=(%u+)}}$");
                    if(pol2==nil)then
                           pol2=myString.match(znaczenia1,"^{{.-|automat=(%u+)|.-}}$");
                    end;
                    if((pol2==nil)or(pol2~="FALSE"))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;
                end;
          else
             if(myString.match(znaczenia1,"^{{[[wW]zór|")~=nil)then
                local pol2=myString.match(znaczenia1,"^{{.-|automat=(%u+)}}$");
                if(pol2==nil)then
                     pol2=myString.match(znaczenia1,"^{{.-|automat=(%u+)|.-}}$");
               end;
               if((pol2==nil)or(pol2~="FALSE"))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;
              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
                        local pel2=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]+)|[^{}|]-|automat=(%u+)}}$");
                           if(pel2==nil)then
                                pel2=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]+)|[^{}|]-|automat=(%u+)|.-}}$");
                                if(pel2==nil)then
                                      pel2=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]+)|[^{}|]-|.-|automat=(%u+)}}$");
                                      if(pel2==nil)then  
                                            pel2=myString.match(znaczenia1,"^{{[^|{}]+|[^{}|]-|([^|{}]+)|[^{}|]-|.-|automat=(%u+)|.-}}$");
                                      end;
                                end;  
                           end;
                          if((pel2==nil)or(pel2~="FALSE"))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;
                   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;
   tabled.c[nazwa_modolu]={};
   tabled.c[nazwa_modolu]=tabled2;
  return tabled;
end;
function NumerWzoruIGrafiki3(tabled)
                for nazwa_strony_glownej,val in pairs(tabled.list)do 
                      for i2, value2 in ipairs(tabled.list[nazwa_strony_glownej]) do
                       for nazwa_modolu, val in pairs(tabled.c) do
                          if(tabled.list[nazwa_strony_glownej][i2]==nazwa_modolu)then
      	 	                      for i, value in ipairs(tabled.c[nazwa_modolu]["Wzór"]) do
      	 	    		                     for s, value in ipairs(tabled.c[nazwa_modolu]["Wzór"]) do
                                                if(tabled.c[nazwa_modolu]["Wzór"][i]==tabled.c[nazwa_modolu]["Wzór"][s])then
                                                    if(s==i)then
                                                           tabled.c[nazwa_modolu]["Wzór"][i][2]=i2.."."..s;
                                                           break;
                                                    elseif(s<i)then break;end;
                                                end;
                                           end;
      	 	                      end;	 
                             for i, value in ipairs(tabled.c[nazwa_modolu]["Grafika"]) do
      	 	    		                      for s, value in ipairs(tabled.c[nazwa_modolu]["Grafika"]) do
                                                if(tabled.c[nazwa_modolu]["Grafika"][i]==tabled.c[nazwa_modolu]["Grafika"][s])then
                                                    if(s==i)then
                                                           tabled.c[nazwa_modolu]["Grafika"][i][2]=i2.."."..s;
                                                           break;
                                                    elseif(s<i)then break;end;
                                                end;
                                           end;
      	 	                      end;	
      	 	                  break;
      	                  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);
  plik=string.gsub(plik,"_"," ");
  local d=mw.loadData("Moduł:StronicowyParser/data").c;
 local nam=nil;
    for nazwa_modolu, value0 in pairs(d.c) do
       if(nazwa_modolu==plik)then
           local licznik=0;
      	 	   for i, value in ipairs(d.c[nazwa_modolu]["Wzór"]) do
      	 	        if(d.c[nazwa_modolu]["Wzór"][i][1]==frame.args[2])then
                      licznik=licznik+1;
                      if(licznik==1)then nam=d.c[nazwa_modolu]["Wzór"][i][2];end;
                    end;
            end;               
                 if(licznik>1)then return nil; elseif(licznik==1)then return nam;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 uchwyt";
  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);
  plik=string.gsub(plik,"_"," ");
  local d=mw.loadData("Moduł:StronicowyParser/data").c;
 local nam=nil;
    for nazwa_modolu, value0 in pairs(d.c) do
       if(nazwa_modolu==plik)then
           local licznik=0;
      	 	   for i, value in ipairs(d.c[nazwa_modolu]["Grafika"]) do
      	 	        if(d.c[nazwa_modolu]["Grafika"][i][1]==frame.args[2])then
                      licznik=licznik+1;
                      if(licznik==1)then nam=d.c[nazwa_modolu]["Grafika"][i][2];end;
                 end;
            end;               
                 if(licznik>1)then return nil; else return nam;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 uchwyt";
  else
    return fc;
  end;
end;
function CzyMaszNumeracjeGrafika(tabled)
   for nazwa_modolu, value0 in pairs(tabled) do
      	 	   for i, value in ipairs(tabled[nazwa_modolu]["Grafika"]) do
      	 	    		        if(#tabled[nazwa_modolu]["Grafika"][i]==1)then 
                           local tab={};
                           tab[1]=nazwa_modolu;
                           tab[2]=tabled[nazwa_modolu]["Grafika"][i][1];
                           tab[3]=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]["Wzór"]) do
      	 	    		        if(#tabled[nazwa_modolu]["Wzór"][i]==1)then 
                           local tab={};
                           tab[1]=nazwa_modolu;
                           tab[2]=tabled[nazwa_modolu]["Wzór"][i][1];
                           tab[3]=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_1=string.gsub(frame_args_1,"_"," ");
   frame_args_2=frame.args[2];
   if(frame_args_1~="")then
    for nazwa_modolu,v2 in pairs(d.c.c) do
   	   if(nazwa_modolu==frame_args_1)then
   	   	 if(frame.args[4]=="Wzór")then
           for i,c in ipairs(d.c.c[nazwa_modolu]["Wzór"]) do
                if(d.c.c[nazwa_modolu]["Wzór"][i][1]==frame_args_2)then
                      if(NumerWzoru2(frame)==nil)then
                             return  "[[Kategoria:Strony ze złymi 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]==i))then
   	   	  	  	                                   return "[[Kategoria:Strony ze złymi uchwytami]]";
   	   	  	                               end;
                           end;
           end;
         elseif(frame.args[4]=="Grafika")then
           for i,c in ipairs(d.c.c[nazwa_modolu]["Grafika"]) do
                if(d.c.c[nazwa_modolu]["Grafika"][i][1]==frame_args_2)then
                      if(NumerGrafiki2(frame)==nil)then
                            return  "[[Kategoria:Strony ze złymi 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]==i))then
   	   	  	  	                          return "[[Kategoria:Strony ze złymi uchwytami]]";
   	   	  	                       end;
                        end;
           end;
       elseif(frame.args[4]=="LinkWzór")then
          if(NumerWzoru2(frame)==nil)then
          	 return "[[Kategoria:Strony ze złymi uchwytami]]";
          end;
       elseif(frame.args[4]=="LinkGrafika")then
       	   if(NumerGrafiki2(frame)==nil)then
       	   	    return  "[[Kategoria:Strony ze złymi uchwytami]]";
       	   end;
       end;
           break;
           end;
      end;
  end;
 return "";
end;
return p