Moduł:Tabela

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.Tabela(frame)
	
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame,true);
	local parametry_modul=require("Module:Parametry");
	local tab_parametry={}
	local styl=args["styl"];tab_parametry["styl"]="";
	local klasa=args["klasa"];tab_parametry["klasa"]="";
	local atrybuty=args["atrybuty"];tab_parametry["atrybuty"]="";
	
	local kol=tonumber(args["liczba kolumn"]) or 1;
	local liczba_kolumn=(kol>0)and kol or 0;
	tab_parametry["liczba kolumn"]="^%d+$!";
	
	local wier=tonumber(args["liczba wierszy"]) or 1;
	local liczba_wierszy=(wier>0)and wier or 0;
	tab_parametry["liczba wierszy"]="^%d+$!";
	
	local str="\n{|"..(parametry_modul.CzyTak(styl)and " style=\""..styl.."\"" or "")
	        ..(parametry_modul.CzyTak(klasa)and " class=\""..klasa.."\"" or "")
	        ..(parametry_modul.CzyTak(atrybuty)and " "..atrybuty or "")
	        .."\n";
	--
	local styl_tytulu=args["styl tytułu"];local czy_styl_tytulu=parametry_modul.CzyTak(styl_tytulu);
	local klasa_tytulu=args["klasa tytułu"];local czy_klasa_tytulu=parametry_modul.CzyTak(klasa_tytulu);
	local opcje_tytulu=args["opcje tytułu"];local czy_opcje_tytulu=parametry_modul.CzyTak(opcje_tytulu);
	local tytul=args["tytuł"];
	if(tytul)then
		str=str.."|+"..((czy_styl_tytulu) and(" style=\""..styl_tytulu.."\"") or "")..((czy_klasa_tytulu)and(" class=\""..klasa_tytulu.."\"") or "")..((czy_opcje_tytulu) and (" "..opcje_tytulu) or "")..(((czy_styl_tytulu)or(czy_klasa_tytulu)or(czy_opcje_tytulu)) and " | " or " ")..(tytul and (mw.ustring.match(tytul,"^{|") or mw.ustring.match(tytul,"^[%*#:;]")) and ("\n"..tytul) or tytul).."\n";
		if(tytul)then
			tab_parametry["styl tytułu"]="";tab_parametry["klasa tytułu"]="";tab_parametry["opcje tytułu"]="";
		end;
		tab_parametry["tytuł"]="";
	end;
	---
	local czy_naglowki=false;
	for i=1,liczba_kolumn,1 do if(args["nagłówek "..i])then czy_naglowki=true;break;end;end;
	if(czy_naglowki)then
		
	    local styl_naglowka=args["styl nagłówka"];tab_parametry["styl nagłówka"]="";
		local klasa_naglowka=args["klasa nagłówka"];tab_parametry["klasa nagłówka"]=""; 
		
		str=str.."|-"..(parametry_modul.CzyTak(styl_naglowka)and "  style=\""..styl_naglowka.."\"" or "")
	             ..(parametry_modul.CzyTak(klasa_naglowka)and " class=\""..klasa_naglowka.."\"" or "")
	             .."\n";
		
		local function ColSpanNaglowka(tabnaglowka,numer_kolumny)
    		for k=1,#tabnaglowka,1 do
    		    local tabnaglowka2=tabnaglowka[k];
    	   		if(tabnaglowka2[1]<=numer_kolumny)and(tabnaglowka2[2]>=numer_kolumny)then
    	   			return true;
    	   		end;
    		end;
			return false;
		end;
		local tabnaglowka={};
		for numer_kolumny=1,liczba_kolumn,1 do
			local wynik=ColSpanNaglowka(tabnaglowka,numer_kolumny);
			if(not wynik)then
				local opcje=args["opcje "..numer_kolumny];
				tab_parametry["opcje "..numer_kolumny]="";
				local colspan2=opcje and mw.ustring.match(opcje,"colspan%s*=%s*\"%s*(%d+)%s*\"") or nil;
				colspan=colspan2 or args["kolumny "..numer_kolumny];
				local kolumny=parametry_modul.CzyTak(colspan) and colspan or nil;
				local naglowek=args["nagłówek "..numer_kolumny];
				tab_parametry["kolumny "..numer_kolumny]="^%d+$?";
				local col=colspan and tonumber(colspan) or 1;
				colspan=(col>1) and col or 1;
				if(colspan>1)then
					table.insert(tabnaglowka,{numer_kolumny,numer_kolumny+colspan-1})
				end;
				local czy_opcje=parametry_modul.CzyTak(args["opcje "..numer_kolumny]);
				local czy_styl=parametry_modul.CzyTak(args["styl "..numer_kolumny]);
				local czy_klasa=parametry_modul.CzyTak(args["klasa "..numer_kolumny]);
				
				str=str.."!"
					..(czy_opcje and " "..args["opcje "..numer_kolumny] or "")
					..(czy_styl and " style=\""..args["styl "..numer_kolumny].."\"" or "")
					..(czy_klasa and " class=\""..args["klasa "..numer_kolumny].."\"" or "")
					..((kolumny and not colspan2) and " colspan=\""..kolumny.."\"" or "")
					..((czy_opcje or czy_styl or czy_klasa or kolumny) and " | " or " ")
					..((naglowek and (mw.ustring.match(naglowek,"^{|") or mw.ustring.match(naglowek,"^[%*#:;]")) and ("\n"..naglowek) or naglowek)
						       or "{{{nagłówek "..numer_kolumny.."}}}").."\n";
			    tab_parametry["styl "..numer_kolumny]="";
			    tab_parametry["klasa "..numer_kolumny]="";
				tab_parametry["opcje "..numer_kolumny]="";
				tab_parametry["nagłówek "..numer_kolumny]="!";
			end;
		end;
	end;
	local function ColAndRowSpan(tab,numer_wiersza,numer_kolumny)
    	for k=1,#tab,1 do
    		    local tab2=tab[k];
    	   		if(tab2[1]<=numer_wiersza)and(tab2[2]<=numer_kolumny)and(tab2[3]>=numer_wiersza)and(tab2[4]>=numer_kolumny)then
    	   			return true;
    	   		end;
    	end;
		return false;
	end;
	local tab={};
	for numer_wiersza=1,liczba_wierszy,1 do
		local str2=""
		for numer_kolumny=1,liczba_kolumn,1 do
			local czypominac=ColAndRowSpan(tab,numer_wiersza,numer_kolumny);
			if(not czypominac)then
				local opcje=args["opcje "..numer_wiersza.."_"..numer_kolumny];
				tab_parametry["opcje "..numer_wiersza.."_"..numer_kolumny]="";
				
				local colspan2=opcje and mw.ustring.match(opcje,"colspan%s*=%s*\"%s*(%d+)%s*\"") or nil
				local colspan=colspan2 or args["kolumny "..numer_wiersza.."_"..numer_kolumny];
				
				kolumny=parametry_modul.CzyTak(colspan) and colspan or nil;
			
				---
				
				local rowspan2=opcje and mw.ustring.match(opcje,"rowspan%s*=%s*\"%s*(%d+)%s*\"") or nil;
				local rowspan=rowspan2 or args["wiersze "..numer_wiersza.."_"..numer_kolumny];
				
				wiersze=parametry_modul.CzyTak(rowspan) and rowspan or nil;
				----
				
				if(not colspan2)then tab_parametry["kolumny "..numer_wiersza.."_"..numer_kolumny]="^%d+$?";end;
				if(not rowspan2)then tab_parametry["wiersze "..numer_wiersza.."_"..numer_kolumny]="^%d+$?";end;
				
				if((not wiersze)and(not kolumny))then
					local scal=args["scal "..numer_wiersza.."_"..numer_kolumny];
					if(parametry_modul.CzyTak(scal))then
						wiersze,kolumny=mw.ustring.match(scal,"^(%d+)%s+(%d+)$");
					end;
					tab_parametry["scal "..numer_wiersza.."_"..numer_kolumny]="^%d+%s+%d+$?";
				end;
				
				local col=kolumny and tonumber(kolumny) or 1;
				local row=wiersze and tonumber(wiersze) or 1;
	    		colspan=(col>1)and col or 1;
				rowspan=(row>1) and row or 1;
				if(((colspan>1)and(rowspan>1))or((colspan>1)and(rowspan==1))or((colspan==1)and(rowspan>1)))then
					table.insert(tab,{numer_wiersza,numer_kolumny,numer_wiersza+rowspan-1,numer_kolumny+colspan-1})
				end;
				opcje=parametry_modul.CzyTak(opcje)and opcje or nil;
				local komorka=args["komórka "..numer_wiersza.."_"..numer_kolumny];
				tab_parametry["komórka "..numer_wiersza.."_"..numer_kolumny]="!";
				tab_parametry["nagłówek "..numer_wiersza.."_"..numer_kolumny]="";
				local kreska_pionowa_czy_wykrzyknik;
				if(parametry_modul.CzyTak(args["nagłówek "..numer_wiersza.."_"..numer_kolumny]))then 
					kreska_pionowa_czy_wykrzyknik="!";
				else 
					kreska_pionowa_czy_wykrzyknik="|";
				end;
				local styl_komorki=args["styl "..numer_wiersza.."_"..numer_kolumny];
				local klasa_komorki=args["klasa "..numer_wiersza.."_"..numer_kolumny];
				tab_parametry["styl "..numer_wiersza.."_"..numer_kolumny]=""
				tab_parametry["klasa "..numer_wiersza.."_"..numer_kolumny]="";
				czy_opcje=parametry_modul.CzyTak(opcje);
				czy_styl_komorki=parametry_modul.CzyTak(styl_komorki);
				czy_klasa_komorki=parametry_modul.CzyTak(klasa_komorki);
				str2=str2..kreska_pionowa_czy_wykrzyknik
					..((czy_opcje) and " "..opcje or "")
					..((czy_styl_komorki) and " style=\""..styl_komorki.."\"" or "")
					..((czy_klasa_komorki) and " class=\""..klasa_komorki.."\"" or "")
					..((not rowspan2 and wiersze) and " rowspan=\""..wiersze.."\"" or "")
					..((not colspan2 and kolumny) and " colspan=\""..kolumny.."\"" or "")
					..((czy_opcje or czy_styl_komorki or czy_klasa_komorki or wiersze or kolumny) and " | " or " ")
					..((komorka and (mw.ustring.match(komorka,"^{|") or mw.ustring.match(komorka,"^[%*#:;]")) and ("\n"..komorka) or komorka)
						   or "{{{komórka "..numer_wiersza.."_"..numer_kolumny.."}}}")
					.."\n";
			end;
		end;
		local czy_puste=(str2=="");
		if(not czy_puste)then
			local opcje_wiersza=args["opcje wiersza "..numer_wiersza];
			local styl_wiersza=args["styl wiersza "..numer_wiersza];
			local klasa_wiersza=args["klasa wiersza "..numer_wiersza];
			tab_parametry["opcje wiersza "..numer_wiersza]="";
			tab_parametry["styl wiersza "..numer_wiersza]="";
			tab_parametry["klasa wiersza "..numer_wiersza]="";
			local czy_opcje=parametry_modul.CzyTak(opcje_wiersza);
			local czy_styl=parametry_modul.CzyTak(styl_wiersza);
			local czy_klasa=parametry_modul.CzyTak(klasa_wiersza);
			str=str.."|-"..(czy_opcje and " "..opcje_wiersza or "")
			            ..(czy_styl and " style=\""..styl_wiersza.."\"" or "")
			            ..(czy_klasa and " class=\""..klasa_wiersza.."\"" or "")
			            .."\n"
			            ..str2;
		else
			str=str.."|-\n";
		end;
	end;
	local sprawdz_modul=require("Module:Sprawdź");
	tab_parametry[""]="problemy-w-szablonie-%s {{Kategoria|Szablon %s do sprawdzenia}}";
	local frame2=frame:getParent():newChild{args=tab_parametry,}
	local fun_parametry=sprawdz_modul.Parametry(frame2) or "";
	return str.."|}\n"..fun_parametry;
end;
return p;