Moduł:Przypisy

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Moduł techniczny do obsługi szablonów {{przypisy}} i {{uwagi}}.

Przypisy[edytuj]

Funkcja generująca sekcję lub treść sekcji przypisów lub uwag.

parametry[edytuj]

Pole Do czego służy? {{Przypisy}} {{Uwagi}}
wzór Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem z parametrami ===?%s*Przypisy%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{!}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Uu]wagi%s*{{!}}.
wzór0 Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem bez parametrów ===?%s*Przypisy%s*===?%s+{{((}}%s*[Pp]rzypisy%s*{{))}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Uu]wagi%s*{{))}}.
wzór1 Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem z parametrami ===?%s*Przypisy%s*===?%s+{{((}}%s*[Gg]rupa przypisów%s*{{!}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Gg]rupa uwag%s*{{!}}.
wzór2 Wyrażenie regularne do wykrywania nagłówka sekcji przed wywołanym szablonem bez parametrów ===?%s*Przypisy%s*===?%s+{{((}}%s*[Gg]rupa przypisów%s*{{))}}. ===?%s*Uwagi%s*===?%s+{{((}}%s*[Gg]rupa uwag%s*{{))}}.
nagłówek Nagłówek sekcji, przy nie ustawionej zmiennej: group lub o nazwie pustej, w rodzicu, do wstawienia, jeśli nie zostanie wykryty za pomocą podanego wyrażenia regularnego == Przypisy == == Uwagi ==
nagłówek0 Nagłówek sekcji, przy ustawionej zmiennej: group lub o nazwie pustej w rodzicu, do wstawienia, jeśli nie zostanie wykryty za pomocą podanego wyrażenia regularnego == Grupa przypisów == == Grupa uwag ==
kategoria Link do kategorii błędu dodawanej jeśli wykryte zostanie użycie nieudokumentowanego pola w szablonie. [[Kategoria:Szablon:Przypisy do sprawdzenia]] [[Kategoria:Szablon:Uwagi do sprawdzenia]]
kategoria0 Link do kategorii błędu dodawanej jeśli wykryte zostanie użycie nieudokumentowanego pola w szablonie. [[Kategoria:Szablon:Grupa przypisów do sprawdzenia]] [[Kategoria:Szablon:Grupa uwag do sprawdzenia]]
kategoria1 Link do kategorii jest, jeśli są przypisy (uwagi) z oczekiwanym nagłówkiem. [[Kategoria:Szablon:Przypisy z oczekiwanym nagłówkiem]] [[Kategoria:Szablon:Uwagi z oczekiwanym nagłówkiem]]
kategoria2 Link do kategorii jest, jeśli są przypisy (uwagi) bez oczekiwanego nagłówka. [[Kategoria:Szablon:Przypisy bez oczekiwanego nagłówka]] [[Kategoria:Szablon:Uwagi bez oczekiwanego nagłówka]]
kategoria3 Link do kategorii jest, jeśli są grupy przypisów (uwag) z oczekiwanym nagłówka. [[Kategoria:Szablon:Grupy przypisów z oczekiwanym nagłówka]] [[Kategoria:Szablon:Grupy uwag z oczekiwanym nagłówka]]
kategoria4 Link do kategorii jest, jeśli są grupy przypisów (uwag) z oczekiwanym nagłówka. [[Kategoria:Szablon:Grupy przypisów bez oczekiwanego nagłówka]] [[Kategoria:Szablon:Grupy uwag bez oczekiwanego nagłówka]]
grupa Domyślna nazwa grupy przypisów. Brak uwaga

Błędy[edytuj]

Błędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.


return {
	
["Przypisy"] = function(frame)
	--mw.logObject(frame:getParent():getTitle(), "parent:title")
	
	local result = {}
	
	local patternX = frame.args["wzór"]
	local pattern0 = frame.args["wzór0"] or patternX
    local pattern1 = frame.args["wzór1"]
	local pattern2 = frame.args["wzór2"] or pattern1
	local section = frame.args["nagłówek"]
	local section0 = frame.args["nagłówek0"]
	local category = frame.args["kategoria"]
	local category0 = frame.args["kategoria0"]
	local category1 = frame.args["kategoria1"]
	local category2 = frame.args["kategoria2"]
	local category3 = frame.args["kategoria3"]
	local category4 = frame.args["kategoria4"]
	local defaultGroup = frame.args["grupa"]

	local hasIgnoredFields = false

	-- grupa  przekazywana w polu o pustej nazwie
	-- aby docelowo zwolnić wszystkie nazwy na przypisy
	local group = frame:getParent().args[""]
	if group and string.match(group, "^=*$") then
		-- z wyjątkiem błednych wywołań w stylu "=="
		hasIgnoredFields = true
		group = nil
	end
	
	-- alternatywnie do czasu przebotowania z pola o nazwie "grupa"
	if not group then
		group = frame:getParent().args["grupa"]
		if group and (#group == 0) then
			group = nil
		end
	end
	
	local function noArgs()
		for k, v in pairs(frame:getParent().args) do
			return false
		end
		
		return true
	end
	local function missingHeader(pattern, section_or_section0)
		local title=mw.title.getCurrentTitle();
		local yes=nil;
		local nstext=mw.ustring.gsub(title.nsText,"_"," ");
		if(nstext==frame:callParserFunction{name='#invoke:Łatki',args={"Ns","Template"}})then
			local yes2=mw.ustring.find(title:getContent(), "<%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>.-{{%s*[Dd]okumentacja%s*}}.-<%s*/%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>");
			local opis=nil;
			if(not yes2)then
				opis=mw.ustring.match(title:getContent(), "<%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>.-{{%s*[Dd]okumentacja%s*|%s*([^|]+)%s*}}.-<%s*/%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>");
				if(not opis)then
					opis=mw.ustring.match(title:getContent(), "<%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>.-{{%s*[Dd]okumentacja%s*|%s*([^|{}]+)%s*|[^{}]-}}.-<%s*/%s*[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s*>");
				end;
			end;
	        if(yes2)then
	        	local title2=mw.title.makeTitle(title.nsText,title.text.."/opis");
	        	yes=mw.ustring.find(title2:getContent(), pattern);
	        elseif(opis)then
	            local title2=mw.title.makeTitle('',opis);
	            yes=mw.ustring.find(title2:getContent(), pattern);
	        else
	        	 yes=mw.ustring.find(title:getContent(), pattern);
	        end;
	    elseif(nstext==frame:callParserFunction{name='#invoke:Łatki',args={"Ns","Module"}})then
	    	local nazwa=frame:callParserFunction{name='#invoke:Łatki',args={"PełnaNazwaOpisuModułu"}};
	        local title2=mw.title.makeTitle('',nazwa);
	        yes=mw.ustring.find(title2:getContent(), pattern);
	    else
	    	yes=mw.ustring.find(title:getContent(), pattern);
        end;			
		return
			pattern -- wymagany wzór na wyszukiwanie wywołania z nagłówkiem
			and section_or_section0-- wymagany nagłówek do wstawienia
			and pattern~="" --wyrażenie regularne do sprawdzania, czy występują oczekiwane niepuste nagłówki sekcji
			and section_or_section0~="" --wstawiany nagłówek sekcji, gdy nie ma oczekiwanych niepustych nagłówków
			and not yes;
	end
	--mw.logObject(pattern, "pattern")
	function cat(category0, category1)
	    local pattern=noArgs() and ((not group)and pattern0 or pattern2) or ((not group)and patternX or pattern1)
	    local section_or_section0=(((not group)and(section)) or (group and(section0)))
		if missingHeader(pattern,section_or_section0) then
			table.insert(result, section_or_section0)
			table.insert(result, "\n")
			if((category1)and(category1~=""))then
				table.insert(result,category1)
			end;
		elseif((category0)and(category0~=""))then
			table.insert(result,category0)
		end;
	end
	local args=frame:getParent().args
	if(((not args["bez kategorii"])or(args["bez kategorii"]==""))and((not args["stopień nagłówka"])or((args["stopień nagłówka"])and(mw.ustring.find(args["stopień nagłówka"],"^=+$")))))then
		if(not mw.title.getCurrentTitle().isTalkPage)then
			if(not group)then
				cat(category1,category2)
			elseif(group~="")then
				cat(category3,category4)
			end
		end
	end
	table.insert(result, '<div class="do-not-make-smaller refsection')
	if group or defaultGroup then
		local groupClass, _ = (group or defaultGroup) == "uwaga" and "uwagi" or string.gsub(group or defaultGroup, ' ', '_')
		table.insert(result, " refsection-")
		table.insert(result, groupClass)
	end
	table.insert(result, '">')
	
	-- to jest lista powszechnie występujących pól
	-- w wywołaniach szablonów przypisów i/lub uwag
	local exceptions = {
		"", -- to jest docelowo jedyne wyjątkowe pole
		"colwidth", -- kopia z enwiki?
		"group", -- kopia z enwiki?
		"grupa",
		"poziom",
		"przypis",
		"przypisy",
		"Przypisy",
		"refs", -- kopia z enwiki?
		"status",
		"stopien",
		"stopień",
		"Stopień",
		"stopnień",
		"uwagi",
	}
	local ignore = {}
	for i, v in ipairs(exceptions) do
		ignore[v] = true
	end
	
	local contents = {}
	for k, v in pairs(args) do
		if (type(k) == "number") and (k == 1) then
			--mw.logObject( {k, v}, "pole {{{1}}} puste lub z przypisami w stylu <ref name=...>")
			table.insert(contents, v)
		elseif(k=="stopień nagłówka")then
			-- gdy poziom nagłówka oznaczany przez parametr w szablonie: stopień nagłówka
			if(not string.match(v,"^=*$"))then 
				 -- wchodzę, gdy wartość parametru stopień nagłówka nie składa się z samych równości lub nie jest wartością pustą
				 hasIgnoredFields=true;
	        end;
	    elseif(k=="bez kategorii")then
		elseif ignore[k] then
		-- !!! TO WYŁĄCZĘ PO PRZEBOTOWANIU !!!
		       hasIgnoredFields = k ~= "";
			-- pole ignorowane
			--mw.logObject( {k, v}, "ignorowane pole z potencjalnymi przypisami w stylu <ref name=...>")
			table.insert(contents, v)
		elseif (type(k) == "string") then
			-- pole podanej nazwie tłumaczymy na przypis o takiej samej nazwie
			local ref = frame:extensionTag('ref', v, {name=k, group=group or defaultGroup})
			--mw.logObject( {k, v, ref}, "indywidualny przypis")
			table.insert(contents, ref)
		else
			-- pole indeksowane
			--mw.logObject( {k, v}, "indeksowane pole z potencjalnymi przypisami w stylu <ref name=...>")
			table.insert(contents, v)
			hasIgnoredFields = true
		end
	end
	
	local references = frame:extensionTag('references', table.concat(contents), {group=group or defaultGroup, responsive="1"})
	
	table.insert(result, references)
	table.insert(result, '</div>')
	if ((not args["bez kategorii"])or(args["bez kategorii"]=="")) and hasIgnoredFields and category and category ~="" then
		--mw.logObject({hasIgnoredFields, category}, "hasIgnoredFields and category")
		if(not group)then 
			table.insert(result, category) 
		else 
			table.insert(result, category0) 
		end
	end
	
	--mw.logObject(table.concat(result), "result")
	return table.concat(result)
end,
}