Moduł:Html

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 p.TransformacjaKlasyZnakowej(wyrazenie_do_transformacji)
    wyrazenie_do_transformacji=mw.ustring.gsub(wyrazenie_do_transformacji,"([%[%]%(%)%+%-%*%?%.%^%$%%'])",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end)
	return wyrazenie_do_transformacji;
end;
p["TransformacjaKoduZnakuDoZnakuŁancucha"]=function(wyrazenie_do_transformacji)
	return mw.ustring.gsub(wyrazenie_do_transformacji,"&#(%d+);",function (s) return tostring(mw.ustring.char(s));end)
end;
function p.ZnakiSpecjalneWikiLinku(ciag)
	local tab_nawiasy={
    	["{"]="&#"..mw.ustring.byte("{")..";",
    	["}"]="&#"..mw.ustring.byte("}")..";",
    	["|"]="&#"..mw.ustring.byte("|")..";",
    }
    ciag,_=mw.ustring.gsub(ciag,"([{}|])",tab_nawiasy);
    return ciag;
end;
function p.KodHTMLZnaku(frame)
	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
  	local znak=PobierzParametr(1);
  	if(not parametry_modul.CzyTak(znak))then return "(błąd)";end;
  	local czy_kod_znaku=PobierzParametr(2);
 
	local czy_tak=parametry_modul["CzyTakCiąg"](czy_kod_znaku);
	if(czy_tak)then
		return "&#"..tostring(mw.ustring.byte(znak))..";";
	else
		return "&#"..tostring(mw.ustring.byte(znak))..";";
	end;
end;
p["KodyHTMLZnakówWikiCiągu"] = function (frame)
	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
  	local ciag_znakow=PobierzParametr(1);
  	if(not parametry_modul.CzyTak(ciag_znakow))then return "(błąd)";end;
  	local czy_kod_znaku=PobierzParametr(2);
  	
	local tabznakow={
		["|"]=p.KodHTMLZnaku{"|",czy_kod_znaku,},
		["["]=p.KodHTMLZnaku{"[",czy_kod_znaku,},
		["]"]=p.KodHTMLZnaku{"]",czy_kod_znaku,},
		["{"]=p.KodHTMLZnaku{"{",czy_kod_znaku,},
		["}"]=p.KodHTMLZnaku{"}",czy_kod_znaku,},
		["("]=p.KodHTMLZnaku{"(",czy_kod_znaku,},
		[")"]=p.KodHTMLZnaku{")",czy_kod_znaku,},
		["<"]=p.KodHTMLZnaku{"<",czy_kod_znaku,},
		[">"]=p.KodHTMLZnaku{">",czy_kod_znaku,},
		["="]=p.KodHTMLZnaku{"=",czy_kod_znaku,},
		["/"]=p.KodHTMLZnaku{"/",czy_kod_znaku,},
		["\\"]=p.KodHTMLZnaku{"\\",czy_kod_znaku,},
		[" "]=p.KodHTMLZnaku{" ",czy_kod_znaku,},
		["_"]=p.KodHTMLZnaku{"_",czy_kod_znaku,},
		["-"]=p.KodHTMLZnaku{"-",czy_kod_znaku,},
		["`"]=p.KodHTMLZnaku{"`",czy_kod_znaku,},
		["'"]=p.KodHTMLZnaku{"'",czy_kod_znaku,},
		["~"]=p.KodHTMLZnaku{"~",czy_kod_znaku,},
		["!"]=p.KodHTMLZnaku{"!",czy_kod_znaku,},
		["@"]=p.KodHTMLZnaku{"@",czy_kod_znaku,},
		["#"]=p.KodHTMLZnaku{"#",czy_kod_znaku,},
		["$"]=p.KodHTMLZnaku{"$",czy_kod_znaku,},
		["%"]=p.KodHTMLZnaku{"%",czy_kod_znaku,},
		["^"]=p.KodHTMLZnaku{"^",czy_kod_znaku,},
		["&"]=p.KodHTMLZnaku{"&",czy_kod_znaku,},
		["*"]=p.KodHTMLZnaku{"*",czy_kod_znaku,},
		["+"]=p.KodHTMLZnaku{"+",czy_kod_znaku,},
		["\""]=p.KodHTMLZnaku{"\"",czy_kod_znaku,},
		[","]=p.KodHTMLZnaku{",",czy_kod_znaku,},
		["."]=p.KodHTMLZnaku{".",czy_kod_znaku,},
		["?"]=p.KodHTMLZnaku{"?",czy_kod_znaku,},
		[";"]=p.KodHTMLZnaku{";",czy_kod_znaku,},
		[":"]=p.KodHTMLZnaku{":",czy_kod_znaku,},
	};
   local ciag,_=mw.ustring.gsub(ciag_znakow,"(.)",tabznakow);
   return ciag;
end;
function p.EncodeWiki(parametr)
	local parametr,_=mw.ustring.gsub(parametr,"[_%s]+","_");
	if((not mw.ustring.match(parametr,"&(%d+);"))and(not mw.ustring.match(parametr,"&%a+;")))then
		parametr=mw.text.encode(parametr);
	end;
	return parametr;
end;
function p.DecodeWiki(parametr)
	local parametr,_ = mw.ustring.gsub(parametr,"[_%s]+"," ");
	parametr=mw.text.decode(parametr);
	local html_modul=require("Module:Html");
	parametr=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](parametr);
	return parametr;
end;
function p.IsEncodedHtml(parametr,encode,encode_real)
	return ((encode_real)and(mw.ustring.match(parametr,"^[%w%p%s]*$")and(mw.ustring.match(parametr,"[^%%]"))))
		                       or((encode)and(mw.ustring.match(parametr,"^[^%%]*$")))
		                       or(((not encode_real)or((encode_real)and(mw.ustring.match(parametr,"^[%w%s%p%%]*$"))))
		                       	      and(mw.ustring.match(parametr,"%%%x%x"))
		                              and(not mw.ustring.match(parametr,"%%$"))
		                              and(not mw.ustring.match(parametr,"%%.$"))
		                              and(not mw.ustring.match(parametr,"%%[^%x]."))
		                              and(not mw.ustring.match(parametr,"%%.[^%x]")));
end;
function p.EncodeHtml(parametr,encode,encode_real)
	if(not parametr)then return;end;
	if(p.IsEncodedHtml(parametr,encode,encode_real))then
		return p.EncodeWiki(parametr);
	end;
	return mw.uri.encode(parametr,"WIKI");
end;
function p.DecodeHtml(parametr,spacje,encode,encode_real)
	if(not parametr)then return;end;
	if(p.IsEncodedHtml(parametr,encode,encode_real))then
		if(spacje)then
	    	return p.DecodeWiki(mw.uri.decode(parametr,"WIKI"));
	    else
	        return p.EncodeWiki(mw.uri.decode(parametr,"WIKI"));
	    end;
	end;
	if(spacje)then
	    return p.DecodeWiki(parametr);
	else
		return p.EncodeWiki(parametr);
	end;
end;
function p.EncodeParametryHtml(parametr)
	local parametr,_=mw.ustring.gsub(parametr,"^([^=]*)=([^&]*)", function(a,b)return p.EncodeHtml(a).."="..p.EncodeHtml(b);end);
	parametr,_=mw.ustring.gsub(parametr,"&([^=]*)=([^&]*)", function(a,b)return "&"..p.EncodeHtml(a).."="..p.EncodeHtml(b);end);
	return parametr;
end;
p["NagłówekStronyAdresu"]=function(frame,czy_nie_dolne_myslniki)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_nie_dolne_myslniki=PobierzParametr("z nie dolnymi z myślnikami") or PobierzParametr(2) or czy_nie_dolne_myslniki;
	czy_nie_dolne_myslniki=parametry_modul.CzyTak(czy_nie_dolne_myslniki);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=p.DecodeHtml(nazwa_jednostki,true);
    
  	local naglowek=czy_nie_dolne_myslniki and mw.ustring.match(nazwa_jednostki,"^[^#]*#[%s_]*(.-)[%s_]*$") or mw.ustring.match(nazwa_jednostki,"^[^#]*#(.-)%s*$");
  	naglowek=parametry_modul["Odstępy"]{[1]=naglowek,[2]="tak",[3]=((not czy_nie_dolne_myslniki)and "tak" or nil),};
  	return naglowek;
  end;
p["ParametryStronyAdresu"]=function(frame,czy_naprawiaj)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=p.DecodeHtml(nazwa_jednostki,true);
    
    if(czy_naprawiaj)then
  		local bez_naglowka,_=mw.ustring.gsub(nazwa_jednostki,"^([^#]-)[%s_]*#(.*)$","%1");
		local parametry=mw.ustring.match(bez_naglowka,"^.-%?[%s_]*([^&]+=[^&]-.-)[%s_]*$");
		if(parametry)then
			parametry=mw.ustring.gsub(parametry,"[%s_]*=[%s_]*","=") or nil;
			parametry=mw.ustring.gsub(parametry,"[%s_]*&[%s_]*","&") or nil;
		end;
		return parametry;
	else
		local bez_naglowka,_=mw.ustring.gsub(nazwa_jednostki,"^([^#]-)#(.*)$","%1");
		local parametry=mw.ustring.match(bez_naglowka,"^.-%?([^&]+=[^&]-.-)%s*$");
		return parametry;
	end;
end;
p["NazwaStronyAdresu"]=function(frame,czy_naprawiaj)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=p.DecodeHtml(nazwa_jednostki,true);
    
    if(czy_naprawiaj)then
		nazwa_jednostki,_=mw.ustring.gsub(nazwa_jednostki,"^([^#]-)[%s_]*#(.*)$","%1");
		nazwa_jednostki,_=mw.ustring.gsub(nazwa_jednostki,"^(.-)[%s_]*%?[^&]+=[^&]*.*$","%1");
	else
		nazwa_jednostki,_=mw.ustring.gsub(nazwa_jednostki,"^([^#]-)#(.*)$","%1");
		nazwa_jednostki,_=mw.ustring.gsub(nazwa_jednostki,"^(.-)%s*%?[^&]+=[^&]*.*$","%1");
	end;
	local html_modul=require("Module:Html");
	local czy_url=html_modul["SprawdźURL"](nazwa_jednostki);
	czy_url=czy_url and true or (not czy_naprawiaj);
	
	nazwa_jednostki=parametry_modul["Odstępy"]{[1]=nazwa_jednostki,[2]="tak",[3]=czy_url and true or false,};
	return nazwa_jednostki;
end;
p["NazwaStronyZParametrówStronyAdresu"]=function(frame,czy_naprawiaj)
  	 local parametry_modul=require("Module:Parametry");
  	 local PobierzParametr=parametry_modul.PobierzParametr(frame);
	 local parametry_strony=PobierzParametr("parametry") or PobierzParametr(1);
	 czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	 czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	 
	 if(parametry_modul.CzyTak(parametry_strony))then
	 	local nazwa_strony_linku;
	 	if(czy_naprawiaj)then
    		if(mw.ustring.match(parametry_strony,"^[%s_]*title[%s_]*=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"^[%s_]*title[%s_]*=([^&]+)&?.*$");
    			parametry_strony,_=mw.ustring.gsub(parametry_strony,"^[%s_]*title[%s_]*=([^&]+)&?","");
    		elseif(mw.ustring.match(parametry_strony,"&[%s_]*title[%s_]*=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"&[%s_]*title[%s_]*=([^&]+)&?.*$");
    			parametry_strony,_=mw.ustring.gsub(parametry_strony,"&[%s_]*title[%s_]*=([^&]+).*$","");
    		end;
    	else
    		if(mw.ustring.match(parametry_strony,"^title=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"^title=([^&]+)&?.*$");
    			parametry_strony,_=mw.ustring.gsub(parametry_strony,"^title=([^&]+)&?","");
    		elseif(mw.ustring.match(parametry_strony,"&title=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"&title=([^&]+)&?.*$");
    			parametry_strony,_=mw.ustring.gsub(parametry_strony,"&title=([^&]+).*$","");
    		end;
    	end;
    	nazwa_jednostki=parametry_modul["Odstępy"]{[1]=nazwa_strony_linku,[2]="tak",[3]=(not czy_naprawiaj),};
    	return nazwa_strony_linku,parametry_strony;
    else
    	return nil;
    end;
end;
p["PoprawAdresNagłówkaOrazParametrówStronyAdresu"]=function(frame,czy_naprawiaj)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	local adres=p["NazwaStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil);
   	local parametry_strony=p["ParametryStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil);
    local naglowek_strony=p["NagłówekStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil);
    nazwa_jednostki=adres..(parametry_strony and ("?"..parametry_strony) or "")..(naglowek_strony and ("#"..naglowek_strony) or "");
    
    return nazwa_jednostki;
end;
p["URLStrona"]=function(frame)
  	  local parametry_modul=require("Module:Parametry");
  	  local PobierzParametr=parametry_modul.PobierzParametr(frame);
	  local url=PobierzParametr("url") or PobierzParametr(1);
	  local z_ukosnikiem=parametry_modul.CzyTak(PobierzParametr("ukośnik") or PobierzParametr(2));
	  local serwer,nazwa=mw.ustring.match(url,"^//([a-zA-Z0-9_%+%-%.]+)"..((z_ukosnikiem) and "/" or "").."(/?.*)$");
	  return serwer,nazwa;
end;
p["UrlBezProtokołu"]=function(frame)
   local parametry_modul=require("Module:Parametry");
   local PobierzParametr=parametry_modul.PobierzParametr(frame);
   local url=PobierzParametr("url") or PobierzParametr(1);
   url=mw.ustring.gsub(url,"^%a+:.*@([^@]+)$","//%1");
   return mw.ustring.gsub(url,"^(%a+:)(//)","%2");
end;
local function checkUri(uri)
	local urilen = #uri
	for _,v in ipairs(mw.loadData("Module:Html/dane").obslugiwaneUriSchematy) do
		if (#v < urilen) and (string.lower(string.sub(uri,1, #v)) == v) then
			return (string.match(uri, '^(%S*)//([^%s/]+)') and true or false);
		end
	end
end;
p["SprawdźURL"]=function(frame)
	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local url=PobierzParametr("url") or PobierzParametr(1);
	return checkUri(url);
end;
return p;